获取本周第一个星期一的日期?
这就是我使用(可能不是国际化):
DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
DateTime monday = input.AddDays(delta);
是的,确实如此:没有国际化。星期一并不总是一周的第一天。 – 2009-11-03 07:58:10
您可以使用以下方法获取每周的第一天:CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek – 2009-11-03 08:03:33
实际上,根据文化的一周的第一天在这种情况下没有兴趣; OP需要一周的星期一,而不是一周的第一天。 – 2009-11-03 08:28:35
像这样的工作
DateTime dt = DateTime.Now;
while(dt.DayOfWeek != DayOfWeek.Monday) dt = dt.AddDays(-1);
我敢肯定有一个更好的方式tho :)
试试这个:
public DateTime FirstDayOfWeek(DateTime date)
{
var candidateDate=date;
while(candidateDate.DayOfWeek!=DayOfWeek.Monday) {
candidateDate=candidateDate.AddDays(-1);
}
return candidateDate;
}
编辑的完整性:超载今天的日期:
public DateTime FirstDayOfCurrentWeek()
{
return FirstDayOfWeek(DateTime.Today);
}
为什么循环??,有办法做到这一点没有循环。见下面的答案 – 2009-11-03 07:59:29
的Pondium答案可以在某些情况下向前搜索。如果你想只向后搜索我觉得应该是:
DateTime input = //...
int delta = DayOfWeek.Monday - input.DayOfWeek;
if(delta > 0)
delta -= 7;
DateTime monday = input.AddDays(delta);
这应该是正确的答案,因为它处理星期日,即FirstDayOfWeek是星期一,所以如果星期日是输入日期,它应该返回星期一之前,接受的答案不会。 – 2014-04-24 13:51:09
+1如果'输入'是2017年1月1日(星期日),则此代码将在本周的第一天给出26/12/2016!不是2/1/2017(接受的答案给出!) – 2016-08-26 08:59:28
它也适用于01/01/2019 = 31/12/2018! – 2016-08-26 09:12:29
var now = System.DateTime.Now;
var result = now.AddDays(-((now.DayOfWeek - System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek + 7) % 7)).Date;
可能会回到你星期一。除非你使用周一不是一周的第一天的文化。
什么:
CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek
为什么不使用本地的解决方案?
问题是要得到具体的日期(即2015-11-20)而不是将哪一天定义为第一天。 – 2015-11-20 18:11:52
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;
}
}
国际在这里。我认为作为扩展它可以更有用。
看看这个问题:http://*.com/questions/38039/how-can-i-get-the-datetime-for-the-start-of-the-week – 2009-11-03 07:53:33