【问题标题】:Week of Year C# Datetime一年中的一周 C# 日期时间
【发布时间】:2012-04-11 08:49:06
【问题描述】:

我有以下代码来获取 DateTime 对象时间中给出的一年中的周数

    public static int WeeksInYear(DateTime date)
    {
        GregorianCalendar cal = new GregorianCalendar(GregorianCalendarTypes.Localized);
        return cal.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
    }

我给函数指定日期 2012 年 1 月 1 日,它应该返回第 1 周,但它返回第 52 周。我似乎不知道为什么。有人知道为什么吗?

【问题讨论】:

  • 试试这个cal.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Sunday)
  • @RaghuveerGuthikonda:这只适用于这种特殊情况。例如。 2013 年 1 月 1 日可能是星期六,它不会工作。这只是日历周的计算方式。 2012 年 1 月 1 日是第 52 周,它应该在那里。

标签: c# windows datetime gregorian-calendar


【解决方案1】:

算法完全按照您的指示执行。您将 CalanderWeekRule 设置为 FirstFourDayWeek。 2012 年 1 月 1 日不是第一个四天周的一部分,因此您已指示日历从 1 月 2 日开始计数。

Calculate date from week number

【讨论】:

    【解决方案2】:
    public static int WeeksInYear(DateTime date)
    {
        GregorianCalendar cal = new GregorianCalendar(GregorianCalendarTypes.Localized);
        return cal.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
    

    我认为如果将 CalendarWeekRule.FirstFourDayWeek 更改为 CalendarWeekRule.FirstDay 那么这将正常工作。

    我改变了它然后它工作正常。

    【讨论】:

      【解决方案3】:

      周数计算正确。您应该阅读实际如何计算/计算周数(维基百科?!)。

      注意:周数计算的内置计算是错误的。 Microsoft 在KnowledgeBase-Article 200299 中描述了该问题。它与 ISO-8601 有问题。

      【讨论】:

        【解决方案4】:

        你可以使用Time Period Library for .NETWeek类,它支持ISO 8601星期编号:

        TimeCalendar calendar = new TimeCalendar(
            new TimeCalendarConfig { YearWeekType = YearWeekType.Iso8601 } );
        Week week = new Week( new DateTime( 2012, 01, 01 ), calendar );
        Console.WriteLine( "week #: ", week.WeekOfYear );
        

        【讨论】:

          【解决方案5】:

          我假设因为 2012 年 1 月 1 日是星期日,GetWeekOfYear 表示它返回包含日期的星期,所以它返回 2011 年的最后一周而不是 2012 年的第一周。

          请查看CalendarRule 进行澄清。

          【讨论】:

            【解决方案6】:

            2012 年 1 月 1 日是星期日。我相信这就是你得到 52 的原因,因为那是去年一周的最后一天。 1 月 2 日,您应该会得到正确的结果。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-18
              相关资源
              最近更新 更多