这是我的python代码
import datetime
a = datetime.datetime(2012, 1, 1)
print(a.isocalendar())
,输出为
(2011, 52, 7)
输出的格式是一个元组,包含给定日期实例的年,周号和周日,按各自的顺序排列。
为什么会这样?应该不是(2012, 1, 1)
,如果不是的话怎么将其转换成绝对周数?
答案 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'