用一年中的年和周计算的Python日期不正确

时间:2018-10-16 20:02:27

标签: python date week-number

在计算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)

关于如何解决此问题的其他想法?

1 个答案:

答案 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()