Python 用年份和星期计算的日期不正确

Python date calculating with year and week of year is incorrect

我们在计算 2019 年第一周的开始时遇到问题。

参数为yearweek_of_year。我们总是盯着周一的一周。

获取特定年份的第一天的代码:

from datetime import datetime

result = datetime.strptime('%04d-%02d-1' % (year, week_of_year), '%Y-%W-%w').date()

这适用于大多数年份,但在 year = 2019week_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)

关于如何解决这个问题还有其他想法吗?

咨询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()