代码之家  ›  专栏  ›  技术社区  ›  Houman

如何将同时包含etc/gmt的日期字符串转换为python日期时间?

  •  1
  • Houman  · 技术社区  · 6 年前

    苹果正在返回一个奇怪的收据到期日期格式:

    2018-06-18 15:03:55等时/GMT

    from datetime import datetime
    dt = datetime.strptime('2018-06-18 15:03:55 Etc/GMT', '%Y-%m-%d %H:%M:%S %Z')
    

    ETC和GMT都是一样的。

    我试图将其转换为DateTime对象,但失败了。

    ValueError: time data '2018-06-18 15:03:55 Etc/GMT' does not match format '%Y-%m-%d %H:%M:%S %Z'
    

    为什么首先要定义两个时区?我怎样才能让python理解它呢?

    2 回复  |  直到 6 年前
        1
  •  1
  •   shmee    6 年前

    事实上, Etc/GMT appears to be a valid, existing time zone ,只是日期时间似乎不认识它。如果您有可能安装 pytz 以下内容:

    from datetime import datetime
    import pytz
    
    dt, tz = '2018-06-18 15:03:55 Etc/GMT'.rsplit(maxsplit=1) # rsplit() for simplicity, obviously re would make this safer
    
    dto = datetime.strptime(dt, '%Y-%m-%d %H:%M:%S').replace(tzinfo=pytz.timezone(tz))
    print(dto) # result: 2018-06-18 15:03:55+00:00
    
        2
  •  0
  •   Rakesh    6 年前

    我不确定这是不是正确的方法,但是否有帮助。

    import re
    from dateutil.parser import parse
    
    s = '2018-06-18 15:03:55 Etc/GMT'
    print( parse(re.sub("(?<=:\d{2}\s).*\/", r"", s)) )
    

    输出:

    2018-06-18 15:03:55+00:00
    
    • 我正在使用regex删除 Etc/ 从src datetime
    • 使用 dateutil 转换为DateTime对象。