如何计算一年中的所有周!(急求)

悬赏:20 发布时间:2008-07-04 提问人:dmewy (初级程序员)

现在有个需求.要用下拉框(也就是select)列出一年中的所有周.
首先要知道.年是分为闰年和平年的.闰年也就是有52W余两天,平年就是52W余一天.但是这个余下来的也要算是一周.
也就是说一年有53W.
显示的值为:拿2008年来说就是1/1~1/5;1/6~1/12.以此类推.
意思也就是说每一年的第一周就是从1号开始.但是每周是周日到周六.也就是0-6.
所以说第一周是有可能不是7天的.相反来说最后一周也就是53W肯定不会是七天的.
不知道这个算法该如何写.能得到一年中的所有周.

问题补充:
提了下意见.目前会新建一个table schema.
记录这些数据了..
该问题已经关闭: 超过15天由系统自动关闭,悬赏平分给所有参与回答的会员

回答

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;
}
lxw82307 (初级程序员) 2008-07-04
用API里的Canlendar类,不是很容易实现吗
davis129 (初级程序员) 2008-07-04