我在三台不同的机器上尝试了这个代码,并且我今天的周数仍然是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?
答案 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。