2016-07-08 72 views
0

我嘗試了三種不同的機器這個代碼,我不斷收到28今天的週數:GetWeekOfYear返回錯誤的週數

Dim myCI As New CultureInfo("en-US") 

Dim myCal As System.Globalization.Calendar = myCI.Calendar 
Dim myCWR As CalendarWeekRule = myCI.DateTimeFormat.CalendarWeekRule 

Dim myFirstDOW As DayOfWeek = myCI.DateTimeFormat.FirstDayOfWeek 
Dim week As Integer = myCal.GetWeekOfYear(DateTime.Now, myCWR, myFirstDOW) 

它應該返回27.爲什麼我得到28?

+0

我得到28以及(今天 - 2016年7月7日)。你能解釋爲什麼你認爲它應該是27嗎? – Blackwood

+0

今年**星期六**和今天2016年7月7日是第28周。你計算**完整**周嗎?本週數是** 1 **。 –

回答

1

在我的機器,我得到了EN-US區域性以下值:

myCWR = FirstDay 
myFirstDOW = Sunday 
week = 28 (with DateTime.Today = July 7, 2016) 

這是正確的。通過將CalendarWeekRule.FirstDay和DayOfWeek.Sunday傳遞給Calendar.GetWeekOfYear,您告訴方法您希望第2周在1月1日(即2016年1月3日)之後的第一個星期日開始。所以第一週只有兩天。

如果你想2周開始於1月8日,無論它落在一週中的一天,那麼你必須1月8日(或等價地,1月1日)的一週中的一天傳遞給GetWeekOfYear:

Dim myFirstDOW As DayOfWeek = New DateTime(DateTime.Now.Year, 1, 1).DayOfWeek 
Dim week As Integer = myCal.GetWeekOfYear(DateTime.Now, myCWR, myFirstDOW) 

這臺week至27