为什么python的datetime.isocalendar()和datetime.year不一致?
试试下面的代码,适用于 Python 2.6:
newyear_2012 = datetime.date.fromtimestamp(1325419200)
newyear.year # returns 2012
newyear.isocalendar() # return (2011, 52, 7)
这到底是怎么回事?这是个bug吗?我找不到相关的文档,可能是我没在对的地方找。
如果我把那个 Unix 时间戳在这里转换一下,它告诉我:2012年1月1日星期日 12:00:00 GMT
更新: 下面的回答解释了这并不是 Python 的错误,而是因为 ISO 标准的原因。如果你想得到一个不会把年初的几天算进第52周的周数,可以试试下面的代码:
week_no = int(time.strftime("%U", datetime_object.timetuple()))
我不太确定这对应哪个标准,但从我的角度来看,它的表现更符合直觉(在我的应用中,一年的周数应该是随着时间递增的)。
2 个回答
2
请查看这个图示 这里。2012年1月1日其实是在2011年的第52周。
5
来自 https://www.staff.science.uu.nl/~gent0113/calendar/isocalendar_text2.htm
ISO日历年的第一周是指包含至少四天一月份的最早一周...(假设从星期一开始)
这意味着ISO 2012年的开始日期是1月2日。你的时间戳是2012年1月1日星期日 12:00:00 GMT