2009-11-10 90 views
16

我需要找到一種方法來查找我們所在星期一的星期一的日期(DD/MM/YYYY)。使用VB.NET查找星期一的日期

例如,本週,星期一將是09/11/2009,如果這是下週,它將是16/11/2009。

我設法得到代碼形式的地方,但我得到的是'不能轉換爲整數'的錯誤。我使用Date.Today和AddDays()。

感謝您的任何幫助。 :)

+0

同樣的問題作爲http://stackoverflow.com/questions/1706589/datetime-question-in-vb-net ?? – 2009-11-10 20:04:58

+0

接受答案。 – 2011-12-09 21:40:42

回答

5

DateTime.DayOfWeek是一個枚舉,指示給定日期的某一天。

Dim monday As DateTime = Today.AddDays((Today.DayOfWeek - DayOfWeek.Monday) * -1) 
2
=Format(DateAdd("d", (-1 * WeekDay(Date.Today()) + 2), Date.Today()), "dd/MM/yyyy") 
34

如果週日是一週的第一天,你可以簡單地這樣做:

Dim today As Date = Date.Today 
Dim dayDiff As Integer = today.DayOfWeek - DayOfWeek.Monday 
Dim monday As Date = today.AddDays(-dayDiff) 
由於週一是1,你可以用下面的代碼中找到當前周的星期一

如果星期一是一週的第一天:

Dim today As Date = Date.Today 
Dim dayIndex As Integer = today.DayOfWeek 
If dayIndex < DayOfWeek.Monday Then 
    dayIndex += 7 'Monday is first day of week, no day of week should have a smaller index 
End If 
Dim dayDiff As Integer = dayIndex - DayOfWeek.Monday 
Dim monday As Date = today.AddDays(-dayDiff) 
+0

完美地工作,歡呼。 :) – Willis 2009-11-10 20:06:36

+0

您可以將我的答案設置爲接受,然後:-)另外,如果您想對我們發表評論(如您的感謝信息),您應該爲您的問題添加評論或編輯您的問題,而不是添加答案。另外,歡迎在堆棧溢出! – 2009-11-10 20:31:55

+0

如果今天是星期日,這實際上工作嗎?當我嘗試它時,我得到**下面的星期一的日期,而不是上一個星期一。 – 2012-05-07 01:48:11

1

一個簡單的方法應該得到你想要的東西:

private static DateTime GetMondayForWeek(DateTime inputDate) 
    { 
     int daysFromMonday = inputDate.DayOfWeek - DayOfWeek.Monday; 
     return inputDate.AddDays(-daysFromMonday); 
    } 

您還可以擴展它,你想和任何一天:

private static DateTime GetDayForWeek(DateTime inputDate, DayOfWeek inputDay) 
    { 
     int daysAway = inputDate.DayOfWeek - inputDay; 
     return inputDate.AddDays(-daysAway); 
    } 

調用第一個例子,是使用類似:

DateTime mondayDate = GetMondayForWeek(new DateTime(2009, 11, 15)); 
Console.WriteLine(mondayDate); 
+0

給C#喂這個新人? (見標籤) – 2009-11-10 19:47:17

+0

Ahhhh,沒有看到VB標籤。我通常提出問題,而不是回答他們對整個回答的場景有點新意。不幸的是,我的機器上甚至沒有VB。 – 2009-11-10 19:52:41

0

我只是在我正在進行的一個項目中做到這一點 - 我保證,這是正確的。這是返回給定日期後第n個星期一的方法。如果給定的日期是星期一,它將返回下一個星期一。

Public Function GetSubsequentMonday(ByVal startDate As DateTime, ByVal subsequentWeeks As Integer) As DateTime 
    Dim dayOfWeek As Integer = CInt(startDate.DayOfWeek) 
    Dim daysUntilMonday As Integer = (Math.Sign(dayOfWeek) * (7 - dayOfWeek)) + 1 
    'number of days until the next Monday 
    Return startDate.AddDays(CDbl((daysUntilMonday + (7 * (subsequentWeeks - 1))))) 
End Function 
0

從我的意見元騎士的回答繼,這裏是一個簡短的功能,使我在評論中提到的修正:

Public Function GetFirstOfLastWeek() As DateTime 
Dim today As DateTime, daysSinceMonday As Integer 
    today = DateTime.Today 
    daysSinceMonday = today.DayOfWeek - DayOfWeek.Monday 
    If daysSinceMonday < 0 Then 
     daysSinceMonday += 7 
    End If 
    Return today.AddDays(-daysSinceMonday) 
End Function 
0

如果你每週從週一開始,那麼你可以使用這樣的事情:

DateTime mondayDate = DateTime.Now.AddDays(((DateTime.Now.DayOfWeek == DayOfWeek.Sunday?7: (int)DateTime.Now.DayOfWeek) - 1)*-1); 

DateTime sundayDate = DateTime.Now.AddDays(7 - (DateTime.Now.DayOfWeek == DayOfWeek.Sunday?7: (int)DateTime.Now.DayOfWeek)); 
1

另一種方法,如果週一是第一天,是這樣的:

Dim today As Date = Date.Today 
       Dim dayDiff As Integer = today.DayOfWeek - DayOfWeek.Monday 
       Dim monday As Date = today.AddDays(-dayDiff) 

       dayDiff = DayOfWeek.Saturday - today.DayOfWeek + 1 
       Dim sunday As Date = today.AddDays(dayDiff)