Python 用年份和星期计算的日期不正确
Python date calculating with year and week of year is incorrect
我们在计算 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)
关于如何解决这个问题还有其他想法吗?
咨询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()
我们在计算 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)
关于如何解决这个问题还有其他想法吗?
咨询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()