Python datetime isocalendar给出错误的元组

时间:2019-04-02 08:58:46

标签: python datetime iso

这是我的python代码

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

,输出为

(2011, 52, 7)

输出的格式是一个元组,包含给定日期实例的年,周号和周日,按各自的顺序排列。

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

2 个答案:

答案 0 :(得分:3)

按照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日星期日结束,因此日期(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年一周。

答案 1 :(得分:1)

您似乎想要一个北美周号,而不是一个ISO周号。

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