在 Python 中从 ISO 周数获取日期
我有一个 ISO 8601 年和周数,我需要将其转换为该周第一天的日期(星期一)。我该怎么做?
datetime.strptime() 同时采用 % W
和 %U
指令,但都不遵守 ISO 8601 工作日规则 datetime.isocalendar() 使用。
更新: Python 3.6 支持 < libc 中还存在 code>%G、%V
和 %u
指令,允许这一行:
>>> from datetime import datetime
>>> datetime.strptime('2011 22 1', '%G %V %u')
datetime.datetime(2011, 5, 30, 0, 0)
更新 2: <一href="https://docs.python.org/3/library/datetime.html#datetime.date.fromisocalendar" rel="nofollow noreferrer">Python 3.8 添加了 fromisocalendar() 方法,更直观:
>>> from datetime import datetime
>>> datetime.fromisocalendar(2011, 22, 1)
datetime.datetime(2011, 5, 30, 0, 0)
Possible Duplicate:
What’s the best way to find the inverse of datetime.isocalendar()?
I have an ISO 8601 year and week number, and I need to translate this to the date of the first day in that week (Monday). How can I do this?
datetime.strptime() takes both a %W
and a %U
directive, but neither adheres to the ISO 8601 weekday rules that datetime.isocalendar() use.
Update: Python 3.6 supports the %G
, %V
and %u
directives also present in libc, allowing this one-liner:
>>> from datetime import datetime
>>> datetime.strptime('2011 22 1', '%G %V %u')
datetime.datetime(2011, 5, 30, 0, 0)
Update 2: Python 3.8 added the fromisocalendar()
method, which is even more intuitive:
>>> from datetime import datetime
>>> datetime.fromisocalendar(2011, 22, 1)
datetime.datetime(2011, 5, 30, 0, 0)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 isoweek 模块,你可以这样做:
With the isoweek module you can do it with:
%W 将第一个星期一视为第 1 周,但 ISO 定义第 1 周包含 1 月 4 日。 结果会
因此,当且仅当第一个星期一和 1 月 4 日在不同的周时, 相差一位。
如果 1 月 4 日是星期五、星期六或星期日,则属于后者。
所以以下应该有效:
%W takes the first Monday to be in week 1 but ISO defines week 1 to contain 4 January. So the result from
is off by one iff the first Monday and 4 January are in different weeks.
The latter is the case if 4 January is a Friday, Saturday or Sunday.
So the following should work: