【问题标题】:Python strptime parse timezone format "GMT+-H"Python strptime 解析时区格式“GMT+-H”
【发布时间】:2022-01-05 06:03:54
【问题描述】:

我正在使用 python 3.7 并试图找出正确的格式来让这段代码工作

dt = datetime.strptime("4 January 2022, 22:03 GMT-5", "%-d %b %Y, %H:%M %Zz")

上面的行总是失败。我可以做些什么来解析它吗?我假设它在“GMT-5 部分”上失败了

编辑: 添加上下文,输入字符串是从网站上抓取的,所以我需要找到一种方法将其转换为 python 日期时间对象,以便通过代码了解事件发生的时间。我不确定如何“在代码中”更改输入以匹配所需的 strptime 格式

【问题讨论】:

    标签: python-3.x parsing python-datetime timezone-offset


    【解决方案1】:

    %z 解析指令不会解析仅小时的 UTC 偏移量(docs: 需要 ±HHMM[SS[.ffffff]] 形式)。但是您可以从 timedelta 派生一个时区对象并将其设置为

    from datetime import datetime, timedelta, timezone
    
    s = "4 January 2022, 22:03 GMT-5"
    
    parts = s.split('GMT')
    
    dt = (datetime.strptime(parts[0].strip(), "%d %B %Y, %H:%M") # parse to datetime w/o offset
              .replace(tzinfo=timezone(timedelta(hours=int(parts[1]))))) # add UTC offset
    
    print(dt)
    # 2022-01-04 22:03:00-05:00
    

    【讨论】:

      【解决方案2】:

      您使用了错误的月份格式和无效的 UTC 偏移文本(它必须是四位数,如 documentation 中所述):

      >>> datetime.datetime.strptime("4 January 2022, 22:03 GMT-0500", "%d %B %Y, %H:%M %Z%z")
      datetime.datetime(2022, 1, 4, 22, 3, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400), 'GMT'))
      

      【讨论】:

      • 我将对问题进行澄清,但我不控制输入字符串,该字符串是从网站解析的,我试图将其转换为 python 中的日期时间对象,以便我可以将其放入时间。我有点困惑如何使用 python 命令修改输入以使其成为该格式。不确定您是否能提供帮助?
      • @lufthansa747 这将是一个单独的问题,取决于您会遇到的可能值的范围。如果偏移量总是一个,你可以用零包围最后一个字符。
      猜你喜欢
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多