工厂日历中很多情况下使用一年中第多少周的方式。
大部分公司在ERP系统(包括SAP)中,周数的计算方式为:1月1号所在的周为00周,接下来01周、02周,依此类推。
在具体的算法上,可以采用一个基准日期的方式来实现。
//从系统设置中加载周几作为每周的第一天。1-Mon、2-Tue...7-Sun
public int FirstWeekDay()
{
return 1;
}
public int FirstWeekDay()
{
return 1;
}
//取基准日期。
// 基准日期为一个参考日期,为某一周的第一天。
public DateTime BaseDate(int FirstWeekDay)
{
if(FirstWeekDay<1 || FirstWeekDay>7)
FirstWeekDay=1;
//内部基准日期1900-01-01是周一,以这个日期为基础,根据入参调整基准日
{
if(FirstWeekDay<1 || FirstWeekDay>7)
FirstWeekDay=1;
//内部基准日期1900-01-01是周一,以这个日期为基础,根据入参调整基准日
//例如,以周日作为每周第一天,则返回的基准日期为1900-01-07
DateTime result=DateTime.Parse("1900-01-01").AddDays(FirstWeekDay-1);
return result;
}
DateTime result=DateTime.Parse("1900-01-01").AddDays(FirstWeekDay-1);
return result;
}
//求dtDate所在周的第一天
public DateTime FirstDayOfWeek(DateTime dtDate)
{
{
//根据dtDate与基准日期之间间隔的天数,以基准日期为基础,来计算dtDate所在周的第一天
DateTime dt=BaseDate(FirstWeekDay());
TimeSpan ts=dtDate-dt;
return dt.AddDays(ts.Days/7*7);
}
DateTime dt=BaseDate(FirstWeekDay());
TimeSpan ts=dtDate-dt;
return dt.AddDays(ts.Days/7*7);
}
//求dtDate所在周的最后一天
public DateTime LastDayOfWeek(DateTime dtDate)
{
public DateTime LastDayOfWeek(DateTime dtDate)
{
//根据dtDate与基准日期之间间隔的天数,以基准日期为基础,来计算dtDate所在周的最后一天
DateTime dt=BaseDate(FirstWeekDay());
TimeSpan ts=dtDate-dt;
return dt.AddDays(ts.Days/7*7+6);
}
DateTime dt=BaseDate(FirstWeekDay());
TimeSpan ts=dtDate-dt;
return dt.AddDays(ts.Days/7*7+6);
}
//求dtDate所在周为一年中的第几周
public int WeekNumberOfYear(DateTime dtDate)
{
dtDate=DateTime.Parse(dtDate.ToString("yyyy-MM-dd"));
{
dtDate=DateTime.Parse(dtDate.ToString("yyyy-MM-dd"));
//找到dtDate所在年份的00周的第一天
//前提条件是设定1月1号为00周
DateTime dt=FirstDayOfWeek(DateTime.Parse(dtDate.Year.ToString()+"-01-01"));
TimeSpan ts=dtDate-dt;
return ts.Days/7;
}
DateTime dt=FirstDayOfWeek(DateTime.Parse(dtDate.Year.ToString()+"-01-01"));
TimeSpan ts=dtDate-dt;
return ts.Days/7;
}