遵循此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天,而每个星期都属于一年。
使用其中一种类型取决于您要解决的任务。