例如,假设我有以下DateTime
:
DateTime date = new DateTime("2014-01-15")
现在我想保留年份和月份,但将日期设置为当前所在周的星期一?
我发现了类似的帖子,但这些帖子假设Datetime
是今天的,并且没有具体说明你可以为成本DateTime
做什么。
可以使用while loop
:
public static DateTime GetFirstDayOfWeek(DateTime dayInWeek, CultureInfo cultureInfo)
{
DayOfWeek firstDay = cultureInfo.DateTimeFormat.FirstDayOfWeek;
DateTime firstDayInWeek = dayInWeek.Date;
while (firstDayInWeek.DayOfWeek != firstDay)
firstDayInWeek = firstDayInWeek.AddDays(-1);
return firstDayInWeek;
}
然而,这似乎有很多麻烦,我想知道是否有一个更简单的解决方案?
如果你真的想在没有while
周期的情况下做到这一点,我有一个有效的方法:
((7 + (int)date.DayOfWeek) - (int)weekStart) % 7
这是自weekStart
(在您的情况下为DayOfWeek.Monday
)以来的天数。所以你可以这样做:
return date.AddDays(-((7 + (int)date.DayOfWeek) - (int)DayOfWeek.Monday) % 7;
当然,一定要将其作为辅助方法。每次使用这些复杂的单行表达式时都要验证它们,这很烦人。
尽管如此,while
解决方案并不会真正成为性能问题,除非您对日期做了一些非常奇怪的事情。您不应该真的费力地尝试(性能)优化不是处理瓶颈的代码。日期选择器通常不是瓶颈:)