首页 > 解决方案 > 用年份和年份计算的 Python 日期不正确

问题描述

我们在计算 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 = 1Python 将其计算到日期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)

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

标签: pythondateweek-number

解决方案


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

推荐阅读