【问题标题】:Python: UTC timestamp from pytz localized timestampPython:来自 pytz 本地化时间戳的 UTC 时间戳
【发布时间】:2017-06-15 05:55:58
【问题描述】:

我正在尝试使用 pytz 将时间戳字符串转换为从 unix 纪元开始的等效秒数。我对以下代码的输出感到困惑。

import datetime
import pytz

exif = '2008:05:03 16:23:16'
dtexif = datetime.datetime.strptime(exif, '%Y:%m:%d %H:%M:%S')
print dtexif

zrh = pytz.timezone('Europe/Zurich')
tztime = zrh.localize(dtexif)
print tztime

tzfloat = float(tztime.astimezone(pytz.utc).strftime('%s'))
utctime = pytz.utc.localize(datetime.datetime.fromtimestamp(tzfloat))
print utctime

print 'seconds since epoch: %.1f' % tzfloat

使用 pytz-2016.10,它会打印:

2008-05-03 16:23:16
2008-05-03 16:23:16+02:00
2008-05-03 15:23:16+00:00
seconds since epoch: 1209849796.0

我希望倒数第二行是:

2008-05-03 14:23:16+00:00

我对最后一行感到困惑,根据http://www.unixtimestamp.com/代表2008-05-03T21:23:16+00:00

我哪里错了?

【问题讨论】:

  • 夏令时?
  • 看起来pytz 已经通过localize() 处理了这个问题。应用了夏令时的正确偏移量 (+2:00)。

标签: python pytz


【解决方案1】:

看来我搜索的不够仔细,此处已解决:python - datetime with timezone to epoch

计算 tzfloat 的行应该是:

tzfloat = (tztime - datetime.datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds()

我错误地认为时间戳已经与时代相关。

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 2019-08-15
    • 2017-07-04
    • 2019-03-09
    • 2013-08-26
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 2018-09-17
    相关资源
    最近更新 更多