【问题标题】:GetWeekOfYear returns the wrong week numberGetWeekOfYear 返回错误的周数
【发布时间】:2016-07-08 02:33:36
【问题描述】:

我在三台不同的机器上尝试了这段代码,今天的周数一直是 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?

【问题讨论】:

  • 我也得到了 28 个(今天 - 2016 年 7 月 7 日)。你能解释一下为什么你认为应该是 27 岁吗?
  • 今年从星期六开始,今天 2016 年 7 月 7 日是第 28 周。你计算周吗?周数以 1 为基础。

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


【解决方案1】:

在我的机器上,我得到了 en-US 文化的以下值:

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

这是正确的。 通过将 CalendarWeekRule.FirstDay 和 DayOfWeek.Sunday 传递给 Calendar.GetWeekOfYear,您是在告诉方法您希望在 1 月 1 日之后的第一个星期日开始第 2 周(即是 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多