代码之家  ›  专栏  ›  技术社区  ›  Setu Kumar Basak

如何在python中将带时区的日期字符串转换为日期时间

  •  0
  • Setu Kumar Basak  · 技术社区  · 3 年前

    我需要比较两个日期字符串,为此,我需要将日期字符串转换为datetime对象。日期字符串的示例是“2015-08-23T03:36:30-05:00”。我假设“-05:00”是时区字符串。我可以使用以下方法将字符串转换为日期时间:

    import datetime
    
    str = '2015-08-23T03:36:30-05:00'
    
    datetime.datetime.strptime(str,"%Y-%m-%dT%H:%M:%S-%f:00")
    

    enter image description here

    我可以看到 microsecond 50000 这在我看来是错误的,因为-5:00的值是时区。在比较两个日期时间时,正确的解析方法是什么?

    1 回复  |  直到 3 年前
        1
  •  1
  •   user7864386 user7864386    3 年前

    你可以使用 %z 要分析时区信息:

    >>> from datetime import datetime, timezone
    >>> datetime.strptime(str, "%Y-%m-%dT%H:%M:%S%z")
    datetime.datetime(2015, 8, 23, 3, 36, 30, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=68400)))
    

    然后,如果你想将这个日期时间转换为UTC(我认为这是你的目标,因为你说你想比较日期时间),你可以使用 astimezone 方法:

    >>> datetime.strptime(str, "%Y-%m-%dT%H:%M:%S%z").astimezone(timezone.utc)
    datetime.datetime(2015, 8, 23, 8, 36, 30, tzinfo=datetime.timezone.utc)
    

    返回字符串格式:

    >>> datetime.strptime(str, "%Y-%m-%dT%H:%M:%S%z").astimezone(timezone.utc).strftime("%Y-%m-%d %H:%M:%S")
    '2015-08-23 08:36:30'