【发布时间】:2020-08-04 20:14:08
【问题描述】:
我想过去一年并得到一个代表第一周第一个星期一的日期
所以:
- 如果在 2011 中通过,我会返回 2011 年 1 月 3 日
- 如果在 2010 中通过,我会返回 2010 年 1 月 4 日
【问题讨论】:
-
您对“第一周”的定义是什么?见this list of definitions
我想过去一年并得到一个代表第一周第一个星期一的日期
所以:
【问题讨论】:
private DateTime GetFirstMondayOfYear(int year)
{
DateTime dt = new DateTime(year, 1, 1);
while (dt.DayOfWeek != DayOfWeek.Monday)
{
dt = dt.AddDays(1);
}
return dt;
}
【讨论】:
试试这个没有循环的解决方案:
public DateTime FirstMonday(int year)
{
DateTime firstDay = new DateTime(year, 1, 1);
return new DateTime(year, 1, (8 - (int)firstDay.DayOfWeek) % 7 + 1);
}
【讨论】:
您可以使用GetFirstMonday(2010) 获取Jan 2010 的第一个星期一。或者您也可以使用 GetFirstMonday(2010, 2) 指定月份,以获取 Feb 2010 的第一个星期一。
GetFirstDayOfMonth 可以获取给定月份的任何第一个day,需要传递DayOfWeek 值以获得所需day 的结果。
// Common function to get first day for any month & year.
public DateTime GetFirstDayOfMonth(int year, int month, int day)
{
return new DateTime(year, month, 1)
.AddDays((7 - datetime.DayOfWeek.GetHashCode() + day) % 7);
}
public DateTime GetFirstMonday(int year, int month = 1)
{
return GetFirstDayOfMonth(year, month, DayOfWeek.Monday.GetHashCode());
}
【讨论】: