/// <summary>
/// 周的第一天
/// CalendarWeekRule.FirstDay, DayOfWeek.Sunday
/// </summary>
/// <param name="year"></param>
/// <param name="week"></param>
/// <returns></returns>
public static DateTime FirstDateOfWeek(int year, int week)
{
if (year < 1 || year > 9999)
throw new ArgumentException("illegal year", "year");
int maxWeek = MaxWeekOfYear(year);
if (week < 1 || week > maxWeek)
throw new ArgumentException("illegal week", "week");
if (week == 1)
return new DateTime(year, 1, 1);
DateTime firstDayOfYear = new DateTime(year, 1, 1);
DateTime day = firstDayOfYear.AddDays((week - 1) * 7);
DateTime ret = day.AddDays(-Convert.ToInt32(day.DayOfWeek));
return ret;
}
/// <summary>
/// 周的最後一天
/// </summary>
/// <param name="year"></param>
/// <param name="week"></param>
/// <returns></returns>
public static DateTime LastDateOfWeek(int year, int week)
{
if (year < 1 || year > 9999)
throw new ArgumentException("illegal year", "year");
int maxWeek = MaxWeekOfYear(year);
if (week < 1 || week > maxWeek)
throw new ArgumentException("illegal week", "week");
DateTime ret;
DateTime firstDay = FirstDateOfWeek(year, week);
if (week == 1)//week==1
{
ret = firstDay.AddDays(6 - Convert.ToInt32(firstDay.DayOfWeek));
}
else//week>1
{
DateTime tempDay = firstDay.AddDays(6);
DateTime yearLastDay = new DateTime(year, 12, 31);
if (tempDay > yearLastDay)
ret = yearLastDay;
else
ret = tempDay;
}
return ret;
}
//
public static int MaxWeekOfYear(int year)
{
if (year < 1 || year > 9999)
throw new ArgumentException("illegal year", "year");
int maxDays = (DateTime.IsLeapYear(year) ? 366 : 365);
DayOfWeek firstDayOfWeek = new DateTime(year, 1, 1).DayOfWeek;
int beforeFirstSunday = (7 - Convert.ToInt32(firstDayOfWeek)) % 7;
int remainDays = maxDays - beforeFirstSunday;
int ret = (beforeFirstSunday % 7 == 0 ? 0 : 1);
ret += (remainDays / 7);
ret += (remainDays % 7 == 0 ? 0 : 1);
return ret;
}
C# 根據年份和周判斷周的第一天和最後一天
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.