【问题标题】:Python datetime isocalendar giving wrong tuplePython datetime isocalendar给出错误的元组
【发布时间】:2019-04-02 08:58:46
【问题描述】:

这是我的python代码

import datetime
a = datetime.datetime(2012, 1, 1)
print(a.isocalendar())

输出是

(2011, 52, 7)

输出的格式是一个元组,包含给定日期实例的相应顺序的年、周数和工作日。

为什么会这样?不应该是(2012, 1, 1),如果不是,我如何将其转换为绝对周数?

【问题讨论】:

    标签: python datetime iso


    【解决方案1】:

    您似乎需要北美周数,而不是 ISO 周数。

    >>> a = datetime.datetime(2012, 1, 1)
    >>> a.strftime("%Y %U")
    '2012 01'
    

    【讨论】:

    • 如果我输入a = datetime.datetime(2021, 1, 1) a.strftime("%Y %U")它会输出2021 00
    • @AkshatZala 将评论附加到 2 年前的答案不太可能得到有用的回复。问你自己的问题,这不仅描述了%U 指令做了你不期望的事情,而且描述了你 期望的事情。这对每个人来说并不明显,但对你来说可能很明显。您获得 2021 年 1 月 1 日的第 0 周的原因是因为在该系统中,第 1 周是从一年中的第一个星期日(即 2021 年 1 月 3 日)开始的那一周,并且在第一周之前的所有日子星期日被视为在第 0 周(您可以选择将其视为上一年的第 53 周)。
    【解决方案2】:

    根据documentation of isocalendar

    返回一个三元组,(ISO 年、ISO 周数、ISO 工作日)。

    ISO 日历是公历的一种广泛使用的变体。请参阅https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm 以获得很好的解释。

    ISO 年由 52 或 53 个整周组成,其中一周从星期一开始,到星期日结束。 ISO 年的第一周是包含星期四的一年中的第一个(公历)日历周。 这称为第 1 周,该星期四的 ISO 年与其公历年相同.

    例如,2004 年从星期四开始,因此 ISO 2004 年的第一周从 2003 年 12 月 29 日星期一开始,到 2004 年 1 月 4 日星期日结束,因此 date(2003, 12, 29).isocalendar() == (2004, 1, 1) 和 date(2004, 1, 4).isocalendar() == (2004, 1, 7)。

    在您的情况下,2012 年 1 月 1 日是星期日,因此根据 ISO 日历规则,2012 年的第一周是 1 月 2 日 - 1 月 8 日(因为第一个星期四是 1 月 5 日),而 1 月 1 日属于最后一个2011 年的一周。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2014-09-27
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多