python - 用年份和年份计算的 Python 日期不正确
问题描述
我们在计算 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()
推荐阅读
- csv - SAS:在 Sas 中读取 CSV 文件:添加字符日期为 0
- sql - 使用 Panache 选择字符串包含子字符串的位置
- java - 使用 Java 在 Excel 中的给定占位符之间进行迭代
- spring-boot - 合并两个查询以进行分页
- php - 使用 PHP 从 API 中提取数据
- regex - 正则表达式数字金额验证
- javascript - 忽略负鼠断路器中的 HTTP 404 错误?
- javascript - javascript中的双问号与&&
- sql - 查询 15 天内的患者总数
- sql-server - SQL Server 中 SWITCH PARTITION 命令的最低用户权限是多少?