【问题标题】:How to convert a UTC date string to timezone aware datetime object in Python3?如何在 Python3 中将 UTC 日期字符串转换为时区感知日期时间对象?
【发布时间】:2019-06-15 18:24:03
【问题描述】:

我有一个 UTC 格式的日期字符串表示为:

ds = "2019-06-15 17:18:06 UTC"

我正在尝试将其转换为 python utc datetime 对象,如下所示:

d = datetime.strptime(ds,'%Y-%m-%dT%H:%M:%SZ')

但是我收到以下错误:

ValueError: time data '2019-06-15 17:18:06 UTC' does not match format '%Y-%m-%dT%H:%M:%SZ'

那么传递的正确格式是什么,以便我在 UTC 时区得到一个 datetime 对象?

【问题讨论】:

    标签: python-3.x date datetime


    【解决方案1】:

    您当前使用的格式字符串与您提供的日期时间字符串格式不匹配。这就是它抛出错误的原因。

     datetime.strptime(ds,'%Y-%m-%d %H:%M:%S UTC')
    

    【讨论】:

    • 使用此格式字符串,生成的对象不支持时区。当然,如果您知道您的输入是 UTC,这可以手动处理,但是有没有办法自动解析 UTC 标记?请注意,在时区感知对象上使用 d.strftime('%Y-%m-%d %H:%M:%S %Z') 将生成 UTC 标记,datetime.strptime(ds,'%Y-%m-%d %H:%M:%S %Z') 将使用它,但生成的对象时区感知。
    【解决方案2】:

    使用格式%Y-%m-%d %H:%M:%S %Z

    例如:

    import datetime
    import pytz
    
    ds = "2019-06-15 17:18:06 UTC"
    nDate = datetime.datetime.strptime(ds,'%Y-%m-%d %H:%M:%S %Z') 
    timezone = pytz.timezone(ds.split()[-1])
    d_aware = timezone.localize(nDate)
    print(d_aware)
    print(d_aware.tzinfo) 
    

    输出:

    2019-06-15 17:18:06+00:00
    UTC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 1970-01-01
      • 2022-01-11
      相关资源
      最近更新 更多