2009-11-03 101 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; 
    } 
} 

國際在這裏。我認爲作爲擴展它可以更有用。

相關問題