GetWeekOfYear返回错误的周数

时间:2016-07-08 02:33:36

标签: .net vb.net calendar week-number

我在三台不同的机器上尝试了这个代码,并且我今天的周数仍然是28:

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?

1 个答案:

答案 0 :(得分: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日)。所以第1周只有两天。

如果您希望第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。