小能豆

根据周数获取日期

javascript

请问我的代码有什么问题:

import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)

显示“2013-01-01 00:00:00”,谢谢。


阅读 41

收藏
2024-07-26

共1个答案

小能豆

你的代码的问题在于 datetime.datetime.strptime 方法中的格式字符串 %Y-W%W 不能正确解析 ISO 周日期格式 YYYY-Www。这个格式需要更精确地处理 ISO 周的情况。

Python 的 datetime 模块没有直接支持 ISO 周日期格式,但可以通过一些转换来实现。你可以使用 datetime.date 类的 fromisocalendar 方法,它支持 ISO 周日期。

下面是一个示例代码,展示如何正确解析 ISO 周日期格式:

import datetime

d = "2013-W26"
year, week = d.split('-W')
year = int(year)
week = int(week)

# 使用 datetime.date.fromisocalendar 方法将 ISO 年和周转换为日期
r = datetime.date.fromisocalendar(year, week, 1)

print(r)

在这个代码中:
- 我们首先将字符串 d 拆分成年份和周数。
- 然后使用 datetime.date.fromisocalendar 方法将年份、周数和星期几(1 代表星期一)转换为一个日期对象。

当你运行这个代码时,会得到正确的结果:

2013-06-24

这代表 2013 年第 26 周的星期一。如果你需要一个 datetime 对象而不是 date 对象,可以将结果转换为 datetime 对象:

import datetime

d = "2013-W26"
year, week = d.split('-W')
year = int(year)
week = int(week)

# 使用 datetime.date.fromisocalendar 方法将 ISO 年和周转换为日期
date_obj = datetime.date.fromisocalendar(year, week, 1)

# 将日期对象转换为 datetime 对象
r = datetime.datetime.combine(date_obj, datetime.time.min)

print(r)

这样会输出:

2013-06-24 00:00:00

这个方法正确地解析了你的 ISO 周日期格式,并将其转换为 datetime 对象。

2024-07-26