获取一周的第一个星期一的日期?

Las*_*vik 59 .net c#

我想知道你们是否知道如何根据今天的日期得到周流周日?

即2009-11-03通过,2009-11-02被退回

/ M

Pon*_*dum 129

这是我使用的(可能不是国际化的):

DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
DateTime monday = input.AddDays(delta);
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用以下方式获取一周的第一天:CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek (16认同)
  • 实际上根据文化的一周的第一天对这种情况没有兴趣; OP想要一周的星期一,而不是一周的第一天. (10认同)
  • -1.鉴于周日,这将在第二天返回,而不是在6天前返回.(`DayOfWeek.Monday`是'1`,`input.DayOfWeek`是星期日的'0`.) (8认同)
  • 道歉并且不要亲自接受,我只是想对谷歌"一周的第一天"并且得到这个的人表达不同意见.(有趣的是,你把周日作为英国的fdow,就像周一的'en-GB`文化一样.) (2认同)

Mar*_*rco 58

在某些情况下,Pondium答案可以搜索Forward.如果你只想要向后搜索,我认为它应该是:

DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
if(delta > 0)
    delta -= 7;
DateTime monday = input.AddDays(delta);
Run Code Online (Sandbox Code Playgroud)

  • 这应该是正确的答案,因为它处理星期日,即FirstDayOfWeek是星期一,所以如果星期日是输入日期,它应该返回星期一之前.接受的答案没有. (3认同)
  • +1如果'输入'是1/1(2017年周日),则此代码将2016年12月26日作为一周的第一天!不是2/1/2017(接受的答案给出了!) (2认同)

Pau*_*ulB 6

像这样的东西会起作用

DateTime dt = DateTime.Now;
while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1); 
Run Code Online (Sandbox Code Playgroud)

我敢肯定有一个更好的方式... :)


小智 5

public static class DateTimeExtension
{
    public static DateTime GetFirstDayOfWeek(this DateTime date)
    {
        var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;

        while (date.DayOfWeek != firstDayOfWeek)
        {
            date = date.AddDays(-1);
        }

        return date;
    }
}
Run Code Online (Sandbox Code Playgroud)

国际在这里。我认为作为扩展它可以更有用。