在计算2019年第一周的开始时遇到问题。
参数为year
和week_of_year
。我们总是盯着星期一的一周。
获取特定年份第一天的代码:
from datetime import datetime
result = datetime.strptime('%04d-%02d-1' % (year, week_of_year), '%Y-%W-%w').date()
这在大多数年份都有效,但是在year = 2019
和week_of_year = 1
情况下无效,Python将其计算到日期2019-01-02
而不是预期的2018-12-31
。
我们当前解决此问题的方法是:
from datetime import datetime, timedelta
result = datetime.strptime('%04d-%02d-1' % (year, week_of_year), '%Y-%W-%w').date()
# Fixes issue with Python date computing returning the incorrect date
# This only occures for some years. E.g. 2019.
offset = result.isocalendar()[1] - datetime.strptime('%04d-01-01' % year, '%Y-%m-%d').date().isocalendar()[1]
if offset > 0:
result = result - timedelta(days=7)
关于如何解决此问题的其他想法?
答案 0 :(得分:1)
咨询https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior之后,我可以说%W
不遵守ISO定义的周计数器,而只是从一年中的第一个星期一开始计数。将前几天计入周数0 ...
您可以将%V
与%G
一起尝试:
result = datetime.strptime('%04d-%02d-1' % (year, 1), '%G-%V-%w').date()