获取本周第一个星期一的date?

我想知道如果你们知道如何根据今天的date得到当周星期一的date?

即2009-11-03过去了,2009-11-02又回来了

/ M

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

DateTime input = //... int delta = DayOfWeek.Monday - input.DayOfWeek; DateTime monday = input.AddDays(delta); 

Pondium答案在某些情况下可以search前进。 如果你只想向后search,我认为它应该是:

 DateTime input = //... int delta = DayOfWeek.Monday - input.DayOfWeek; if(delta > 0) delta -= 7; DateTime monday = input.AddDays(delta); 

像这样的东西会工作

 DateTime dt = DateTime.Now; while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1); 

我敢肯定,有一个更好的方式tho 🙂

 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; } } 

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

关于什么:

 CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek 

为什么不使用本机解决scheme?

 var now = System.DateTime.Now; var result = now.AddDays(-((now.DayOfWeek - System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek + 7) % 7)).Date; 

星期一大概会回来。 除非你使用星期一不是一周的第一天的文化。

尝试这个:

 public DateTime FirstDayOfWeek(DateTime date) { var candidateDate=date; while(candidateDate.DayOfWeek!=DayOfWeek.Monday) { candidateDate=candidateDate.AddDays(-1); } return candidateDate; } 

编辑完整性:今天的date过载:

 public DateTime FirstDayOfCurrentWeek() { return FirstDayOfWeek(DateTime.Today); }