【问题标题】:Convert zulu time string to MST datetime object将 zulu 时间字符串转换为 MST 日期时间对象
【发布时间】:2017-01-18 18:29:06
【问题描述】:

如何将此字符串转换为 MST 时区 datetime 对象?

>>> type(date_str)
<type 'str'>
>>> date_str
'2017-01-17T20:02:45.767Z'

【问题讨论】:

    标签: python datetime iso8601


    【解决方案1】:

    这是一个 Python 3.9 选项,仅使用标准库:

    from datetime import datetime
    from zoneinfo import ZoneInfo
    
    date_str = '2017-01-17T20:02:45.767Z'
    
    # to datetime, UTC:
    dt = datetime.fromisoformat(date_str.replace('Z', '+00:00'))
    
    # to mountain standard time:
    dt_mountain = dt.astimezone(ZoneInfo("America/Denver"))
    
    print(dt_mountain.isoformat())
    # 2017-01-17T13:02:45.767000-07:00
    

    对于旧版本,使用 dateutil 的不同方法:

    from datetime import datetime
    import dateutil
    
    date_str = '2017-01-17T20:02:45.767Z'
    
    # to datetime, UTC:
    dt = dateutil.parser.parse(date_str)
    
    # to mountain standard time:
    dt_mountain = dt.astimezone(dateutil.tz.gettz("America/Denver"))
    
    print(dt_mountain.isoformat())
    # 2017-01-17T13:02:45.767000-07:00
    

    【讨论】:

      【解决方案2】:

      这是一个符合ISO 8601 的字符串。有各种libraries that can convert这个。但要将其与时区转换结合起来,您可以:

      import datetime as dt
      from pytz import timezone
      
      def convert_my_iso_8601(iso_8601, tz_info):
          assert iso_8601[-1] == 'Z'
          iso_8601 = iso_8601[:-1] + '000'
          iso_8601_dt = dt.datetime.strptime(iso_8601, '%Y-%m-%dT%H:%M:%S.%f')
          return iso_8601_dt.replace(tzinfo=timezone('UTC')).astimezone(tz_info)
      
      my_dt = convert_my_iso_8601('2017-01-17T20:02:45.767Z', timezone('MST'))
      

      【讨论】:

      • 有没有办法考虑夏令时?上面的代码没有
      • 不考虑夏令时怎么办? Z 表示原始时间戳是祖鲁语。因此它没有夏令时。因此,我认为您应该为 DST 做的唯一一件事就是应用一个具有时区的时区。我只使用了 MST,因为你有。您想到了哪个时区?
      • 我得到的输入仍然是zulu时间,我想将其转换为MST,并使用DST。
      • 至少有三个不同的时区缩写为 MST。 timeandzone.com/zones-abbreviation?hl=en
      • 见谅,现在我明白了,是Mountain Standard (North America)
      猜你喜欢
      • 2020-11-19
      • 1970-01-01
      • 2012-03-15
      • 2014-12-13
      • 2023-04-09
      • 1970-01-01
      • 2022-01-26
      • 2017-08-04
      相关资源
      最近更新 更多