【问题标题】:How to convert dates in the form Year-WeekNumber to datetime in pythonpython - 如何将Year-WeekNumber形式的日期转换为python中的日期时间
【发布时间】:2021-03-15 11:37:34
【问题描述】:

我正在尝试使用 strptime 将 Year-WeekNumber 形式的日期转换为日期时间。根据文档,我应该使用格式代码%Y-%W 来执行此操作,但是当我执行此操作时,它总是返回 1 月 1 日。

>>> datetime.datetime.strptime('2020-11', '%Y-%W')
datetime.datetime(2020, 1, 1, 0, 0)
>>> datetime.datetime.strptime('2020-1', '%Y-%W')
datetime.datetime(2020, 1, 1, 0, 0)
>>> datetime.datetime.strptime('2020-31', '%Y-%W')
datetime.datetime(2020, 1, 1, 0, 0)

为什么 strptime 会给出错误的输出?我可以使用其他方法来处理这种转换吗?

编辑:请注意建议的问题 Python - Get date from day of week, year, and week number 不适合,因为它没有解释为什么 %Y-%W 不适合转换并且它使用的输入语法不同。

【问题讨论】:

    标签: python python-3.x datetime


    【解决方案1】:

    这不是错误。正如您在documentation on strftime() and strptime() format codes 中看到的那样,%W 旁边有两个注释。这里,注释 (7) 是相关的。

    1. strptime() 方法一起使用时,%U%W 仅在指定星期几和日历年 (%Y) 时用于计算。

    因此,您还必须在日期中包含一周中的某天,否则日期会不明确。您可以在%w 中包含一个工作日:

    Directive Meaning Example
    %w Weekday as a decimal number, where 0 is Sunday and 6 is Saturday. 0, 1, …, 6

    例如,如果您总是想选择所需一周的星期一,您可以按如下方式调整您的代码:

    >>> import datetime
    >>> datetime.datetime.strptime('2020-11-1', '%Y-%W-%w')
    datetime.datetime(2020, 3, 16, 0, 0)
    >>> datetime.datetime.strptime('2020-1-1', '%Y-%W-%w')
    datetime.datetime(2020, 1, 6, 0, 0)
    >>> datetime.datetime.strptime('2020-31-1', '%Y-%W-%w')
    datetime.datetime(2020, 8, 3, 0, 0)
    

    您可以创建一个简单的函数来根据 Year-WeekNumber 输入返回星期一:

    def get_monday_datetime(week):
        return datetime.datetime.strptime('%s-1' % week, '%Y-%W-%w')
    

    【讨论】:

    • 感谢您的澄清!如果语法被认为不完整,则期望它会出现错误,例如使用 %V 时。用datetime.datetime.strptime(f'{week}-1', '%Y-%W-%w') 修复了它
    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 2010-12-28
    • 2011-01-23
    • 2014-07-06
    • 1970-01-01
    • 2018-11-21
    • 2020-05-26
    • 2017-12-18
    相关资源
    最近更新 更多