自定义日期时间将日期设置为星期一



例如,假设我有以下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解决方案并不会真正成为性能问题,除非您对日期做了一些非常奇怪的事情。您不应该真的费力地尝试(性能)优化不是处理瓶颈的代码。日期选择器通常不是瓶颈:)

相关内容

  • 没有找到相关文章