nc's world:

天行健,君子以自强不息
地势坤,君子以厚德载物

博客园 首页 新随笔 联系 订阅 管理
    工厂日历中很多情况下使用一年中第多少周的方式。
    大部分公司在ERP系统(包括SAP)中,周数的计算方式为:1月1号所在的周为00周,接下来01周、02周,依此类推。
 
    在具体的算法上,可以采用一个基准日期的方式来实现。
    //从系统设置中加载周几作为每周的第一天。1-Mon、2-Tue...7-Sun
    public int FirstWeekDay()
    {

       return
1;
    }
 
    //取基准日期。
    //  基准日期为一个参考日期,为某一周的第一天。
    public DateTime BaseDate(int FirstWeekDay)
    {
       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;
    }
 
    //求dtDate所在周的第一天
    public DateTime FirstDayOfWeek(DateTime dtDate)
    {
       //根据dtDate与基准日期之间间隔的天数,以基准日期为基础,来计算dtDate所在周的第一天
       DateTime dt=BaseDate(FirstWeekDay());
       TimeSpan ts=dtDate-dt;
       return dt.AddDays(ts.Days/7*7);
    }
 
    //求dtDate所在周的最后一天
    public DateTime LastDayOfWeek(DateTime dtDate)
    {
       //根据dtDate与基准日期之间间隔的天数,以基准日期为基础,来计算dtDate所在周的最后一天
       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所在年份的00周的第一天
       //前提条件是设定1月1号为00周
       DateTime dt=FirstDayOfWeek(DateTime.Parse(dtDate.Year.ToString()+"-01-01"));
       TimeSpan ts=dtDate-dt;
       return ts.Days/7;

    }
posted on 2006-06-16 11:57  nicesnow  阅读(184)  评论(0编辑  收藏  举报