Python datetime isocalendar给出了错误的元组

问题描述 投票:0回答:2

这是我的python代码

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

而输出是

(2011, 52, 7)

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

为什么会这样?不应该是(2012, 1, 1),如果不是我怎么能把它转换为绝对的周数?

python datetime iso
2个回答
1
投票

看起来你想要一个北美周数,而不是ISO周数。

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

3
投票

根据documentation of isocalendar

返回3元组(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)和日期(2004,1,4).isocalendar()==(2004,1,7)。

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

© www.soinside.com 2019 - 2024. All rights reserved.