为什么python的datetime.isocalendar()和datetime.year不同?

时间:2012-01-16 00:21:06

标签: python datetime

在python 2.6中尝试以下内容:

newyear_2012 = datetime.date.fromtimestamp(1325419200)
newyear.year # returns 2012
newyear.isocalendar() # return (2011, 52, 7)

这是什么交易?这是一个错误吗?我找不到记录,但也许我没找对地方。

如果我转换该unix时间戳here,它会告诉我:Sun,2012年1月1日12:00:00 GMT

更新 下面的答案解释了这不是python错误,而是由于ISO规范。如果你想得到第52周的一年中前几天不会出现的周数,你可以尝试以下方法:

week_no = int(time.strftime("%U", datetime_object.timetuple()))

我不确定它对应的标准是什么,但从我的角度来看它的行为更直观(在我的应用程序中,一年内的数字应该随着时间的推移而提升)。

2 个答案:

答案 0 :(得分:5)

来自https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar_text2.htm

ISO日历年的第一周是最早的一周,其中包含1月份的至少4天......(假设从星期一开始)

这使得ISO 2012开始于 1月2日。您的时间戳是 Sun,2012年1月1日12:00:00 GMT

答案 1 :(得分:2)

见图here。 2012年1月1日是2011年第52周。

相关问题