2015-01-12 130 views
0

我正在嘗試獲取當週星期一的日期。這是否接近正確?獲取上一個星期一的日期

Dim MondayOfCurrentWeek As Date = Date.Today - Date.Today.DayOfWeek + 1 

據我瞭解它的AyOfWeek指標爲:

1 = Monday 
2 = Tuesday 
3 = Wednesday 
4 = Thursday 
5 = Friday 
6 = Saturday 
0 = Sunday 

因此,如果例如日期今天是星期四,我會得到:

Dim MondayOfCurrentWeek As Date = Date - 4 + 1 

這將是等於

Date - 3 

,對我來說似乎是對的。

還是我完全沒有?

+0

這是C#,但有一個[半重複這裏](http://stackoverflow.com/questions/38039/how-can-i-get-the-datetime-for-the-start-of-the-week),它有一個很好的功能,你可以使用一週中的任何一天。 –

+0

在事物的另一方面,雖然枚舉在將來的版本中不會改變,但它們總是有可能會發生變化。我會非常謹慎的基於Enum的值來執行算術。 –

+0

他爲什麼會用枚舉?在.NET框架中內建了一週的日子。 –

回答

2

一個非常簡單的替代方法,它同時可能還不如高性能,但確實避免任何基於算術錯誤:

Dim monday As Date = Date.Today 
While (monday.DayOfWeek <> DayOfWeek.Monday) 
    monday = monday.AddDays(-1) 
End While 

這可以很容易地延伸到了一個函數來處理每週的任何一天。除非這是一個非常高的代碼量,否則性能會很好。

+0

@Matt的確。但OP是在週一之後,而不是開始日。 –

+0

其實他是在星期一後的*當前周*,而不是*前一個*星期一 –

+0

@Matt啊,是的 - 我看到你在 –

1

這應該做你想做的。它從所提供的日期找到上一個星期一。有沒有循環,從而將很快和不依賴於枚舉值做算術的調整,因此,如果枚舉值不斷變化不會打破:

Public Shared Function PreviousMonday(ByVal dateValue As DateTime) As DateTime 
    Dim dayOffset As Integer 
    Select Case dateValue.DayOfWeek 
     Case DayOfWeek.Sunday : dayOffset = 6 
     Case DayOfWeek.Monday : dayOffset = 0 
     Case DayOfWeek.Tuesday : dayOffset = 1 
     Case DayOfWeek.Wednesday : dayOffset = 2 
     Case DayOfWeek.Thursday : dayOffset = 3 
     Case DayOfWeek.Friday : dayOffset = 4 
     Case DayOfWeek.Saturday : dayOffset = 5 
    End Select 

    Return dateValue.AddDays(-1 * dayOffset) 
End Function 
相關問題