【问题标题】:datetime: get timestamp with timezone offsetdatetime:获取带有时区偏移的时间戳
【发布时间】:2020-11-23 20:12:41
【问题描述】:

我想从以下格式的日期中获取时间戳:

Mon, 23 Nov 2020 19:00:00 GMT
Mon, 23 Nov 2020 20:00:00 +0100

我正在使用以下语句将日期转换为 datetime 对象:

dateobj = datetime.datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %Z')
dateobj = datetime.datetime.strptime(date, '%a, %d %b %Y %H:%M:%S %z')

但是使用.timestamp() 方法,会打印与纪元不同的秒数。为什么%Z 指令不向datetime 对象添加时区信息?我怎样才能考虑到时区,所以时间戳是相等的?

【问题讨论】:

    标签: python datetime timezone


    【解决方案1】:

    请注意Inconsistent datetime parse timezone in Python。您的问题是%Z,它使strptime 接受 某些字符串(GMT、UTC 和time.tzname 中的任何值-docs),但实际上并没有从中做出任何事情。返回的 datetime 对象是幼稚的 - 这就是为什么如果你调用它的 timestamp() 方法,Python 会假定它是本地时间。

    您可以改用 dateutil 的解析器:

    from dateutil.parser import parse
    
    for s in ("Mon, 23 Nov 2020 19:00:00 GMT", "Mon, 23 Nov 2020 20:00:00 +0100"):
        dt = parse(s)
        print(repr(dt), dt.timestamp())
    
    # datetime.datetime(2020, 11, 23, 19, 0, tzinfo=tzutc()) 1606158000.0
    # datetime.datetime(2020, 11, 23, 20, 0, tzinfo=tzoffset(None, 3600)) 1606158000.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-25
      • 2018-09-11
      • 1970-01-01
      • 2012-04-09
      • 2014-05-24
      • 2017-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多