C# 语言中通过System.DateTime提供了很多关于时间处理的方法,使用起来比较方便。在近来的一个项目中,涉及到一个以week作为周期处理时间的应用。这样,我们希望实现:1、在知道某日期的前提下,能知道该日期在当年的第几周;2、在知道当年的第几周的前提下,能获取该周的起止日期;3、获取本周的起止日期。为此,我写了以下的三个函数,来实现这些功能。
//计算某天属于当年的第几周
private int GetWeekOrderOfDate(DateTime Date)

...{
//当天所在的年份
int year = Date.Year;
//当年的第一天
DateTime firstDay = new DateTime(year, 1, 1);
//当年的第一天是星期几
int firstOfWeek = Convert.ToInt32(firstDay.DayOfWeek);
//当年第一周的天数
int firstWeekDayNum = 7 - firstOfWeek;
//传入日期在当年的天数与第一周天数的差
int otherDays = Date.DayOfYear - firstWeekDayNum;
//传入日期不在第一周内
if (otherDays > 0)

...{
int weekNumOfOtherDays;
if (otherDays % 7 == 0)

...{
weekNumOfOtherDays = otherDays / 7;
}
else

...{
weekNumOfOtherDays = otherDays / 7 + 1;
}

return weekNumOfOtherDays + 1;
}
//传入日期在第一周内
else

...{
return 1;
}
}
//根据某年的第几周获取这周的起止日期
private void WeekRange(int year,int weekOrder, ref DateTime start, ref DateTime end)

...{
//非法参数
if (year <= 0 || weekOrder <= 0 || weekOrder > 53)

...{
return;
}

//当年的第一天
DateTime firstDay = new DateTime(year, 1, 1);

//当年的第一天是星期几
int firstOfWeek = Convert.ToInt32(firstDay.DayOfWeek);

//计算当年第一周的起止日期,可能跨年
int dayDiff = (-1) * firstOfWeek;
int dayAdd = 6 - firstOfWeek;
start = firstDay.AddDays(dayDiff).Date;
end = firstDay.AddDays(dayAdd).Date;
//如果不是要求计算第一周
if (weekOrder != 1)

...{
int addDays = (weekOrder -1)*7;
start = start.AddDays(addDays);
end = end.AddDays(addDays);
}
}
//计算本周的起止日期
private void ThisWeekRange(ref DateTime start, ref DateTime end)

...{
DateTime dt = DateTime.Today;
int weekNow = Convert.ToInt32(dt.DayOfWeek);
int dayDiff = (-1) * weekNow;
int dayAdd = 6 - weekNow;
start = System.DateTime.Now.AddDays(dayDiff).Date;
end = System.DateTime.Now.AddDays(dayAdd).Date;
}
DateTime.Now.ToString(); //如:2007-5-19 12:46:29

DateTime.Now.ToLongDateString(); //如:2007年5月19日

DateTime.Now.ToLongTimeString(); //如:12:46:57

DateTime.Now.ToShortDateString(); //如:2007-5-19

DateTime.Now.ToShortTimeString(); //如:12:47

DateTime.Now.ToString("yyyyMMdd"); //如:20070519

DateTime.Now.ToString("yyyy-MM-dd"); //如:2007-05-19

DateTime.Now.ToString("yyyy年MM月dd日"); //如:2007年05月19日

DateTime.Now.ToString("yyyy~MM~dd"); //如:2007~05~19

DateTime.Now.ToString("yyyy年MM月dd日hh时mm分ss秒"); //如:2007年05月19日12时52分25秒
1、计算某天属于当年的第几周:








































2、根据某年的某周,获取该周的起止日期:
































3、计算本周的起止日期:











附:关于把时间转化成字符串的几个方法:


















