【问题标题】:Calendar week number to date anomaly using strptime使用 strptime 的日历周数到日期异常
【发布时间】:2021-05-30 07:46:09
【问题描述】:
import datetime
d1 = "2020-W53"
r1 = datetime.datetime.strptime(d1 + '-1', "%Y-W%W-%w")
d2 = "2021-W01"
r2 = datetime.datetime.strptime(d2 + '-1', "%Y-W%W-%w")
print(r1,'<-- does I found TIME TRAVEL -->',r2)

两者都返回相同的值

2021-01-04 00:00:00 

我做错了什么?

我猜 2020 年第 53 周应该会在 2020 年 12 月 28 日返回

【问题讨论】:

    标签: python datetime calendar strptime


    【解决方案1】:

    如果您假设ISO week dates,则输出与预期一致。 2020年的第53周是“闰周”;它的星期一和星期四都在 2020 年(星期五是 2021-01-01)。 2021 年的第 1 周从 1 月 4 日开始。

    import datetime
    
    d1 = "2020-W53"
    r1 = datetime.datetime.strptime(d1 + '-1', "%G-W%V-%u")
    
    d2 = "2021-W01"
    r2 = datetime.datetime.strptime(d2 + '-1', "%G-W%V-%u")
    
    print(r1, r2)
    # 2020-12-28 00:00:00 2021-01-04 00:00:00
    

    有关格式化指令,请参阅 strftime() and strptime() Format Codes


    使用 %W%w 解析指令,2020 年实际上是零周;

    d1 = "2020-W00"
    r1 = datetime.datetime.strptime(d1 + '-1', "%Y-W%W-%w")
    print(r1)
    # 2019-12-30 00:00:00
    

    虽然从 2019 年开始,星期四在 2020 年。然后周数将上升到 52 (2020-12-28),并从 2021 年的第一周 (2021-01-04) 开始。

    【讨论】:

      【解决方案2】:

      应该是"2020-W52"-1-%w 模式告诉解析器选择该周的星期一,而第 53 周的星期一日期为 2021 年。

      import datetime
      d1 = "2020-W53"
      r1 = datetime.datetime.strptime(d1 + '-1', "%G-W%V-%u")
      d2 = "2021-W01"
      r2 = datetime.datetime.strptime(d2 + '-1', "%G-W%V-%u")
      print(r1,'<-- does I found TIME TRAVEL -->',r2)
      
      

      输出:

      2020-12-28 00:00:00 <-- does I found TIME TRAVEL --> 2021-01-04 00:00:00
      

      【讨论】:

      • "第 53 周的星期一日期为 2021 年" - 如果使用 ISO 日历,则不正确。我认为这里的重点是,使用 %W %w 解析指令,OP 的 2020 年将有零周。
      猜你喜欢
      • 2020-08-12
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多