2009-11-03 100 views
56

我想知道你们是否知道如何根据今天的日期得到本周星期一的日期?获取本周第一个星期一的日期?

即2009-11-03传递和获取2009-11-02返回

/M

+1

看看这个问题:http://stackoverflow.com/questions/38039/how-can-i-get-the-datetime-for-the-start-of-the-week – 2009-11-03 07:53:33

回答

125

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

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

是的,确实如此:没有国际化。星期一并不总是一周的第一天。 – 2009-11-03 07:58:10

+15

您可以使用以下方法获取每周的第一天:CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek – 2009-11-03 08:03:33

+10

实际上,根据文化的一周的第一天在这种情况下没有兴趣; OP需要一周的星期一,而不是一周的第一天。 – 2009-11-03 08:28:35

6

像这样的工作

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

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

0

试试这个:

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); 
} 
+0

为什么循环??,有办法做到这一点没有循环。见下面的答案 – 2009-11-03 07:59:29

53

的Pondium答案可以在某些情况下向前搜索。如果你想只向后搜索我觉得应该是:

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

这应该是正确的答案,因为它处理星期日,即FirstDayOfWeek是星期一,所以如果星期日是输入日期,它应该返回星期一之前,接受的答案不会。 – 2014-04-24 13:51:09

+1

+1如果'输入'是2017年1月1日(星期日),则此代码将在本周的第一天给出26/12/2016!不是2/1/2017(接受的答案给出!) – 2016-08-26 08:59:28

+0

它也适用于01/01/2019 = 31/12/2018! – 2016-08-26 09:12:29

1
var now = System.DateTime.Now; 

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

可能会回到你星期一。除非你使用周一不是一周的第一天的文化。

3

什么:

CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek 

为什么不使用本地的解决方案?

+2

问题是要得到具体的日期(即2015-11-20)而不是将哪一天定义为第一天。 – 2015-11-20 18:11:52

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

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

相关问题