遵循此https://stackoverflow.com/questions/2600775/how-to-get-week-number-in-python的答案后,我正在使用datetime.isocalendar(),更具体地说是datetime.isocalendar()[1]以获取星期数,例如:

import datetime as dt
dt.date(2015, 10, 16).isocalendar()[1]
>>> 42


一目了然,除了结果不同于:

dt.date(2015, 10, 16).strftime('%W')
>>> '41'


可以辩称,只要这两种方法之间的1周差异在所有日期中都一致就可以了。

但是一些重大问题在某些年末日期出现了,例如:

dt.date(2018, 12, 31).isocalendar()[1]
>>> 1

dt.date(2018, 12, 31).strftime('%W')
>>> 53


我无法期望datetime.isocalendar()方法返回2018年12月31日的第1周。请注意,似乎编码人员遵循了ISO standard,请参见here

我该如何控制行为?

最佳答案

ISO周有52或53个整周。那是364或371天,而不是通常的365或366天。

ISO使用特殊算法。您可以阅读更多here。因此它具有优势,例如所有星期都恰好有7天,而每个星期都属于一年。

使用其中一种类型取决于您要解决的任务。

10-07 17:11