Python epoch-datetime转换错误?

Python epoch-datetime转换错误?,python,python-3.x,python-3.6,pytz,Python,Python 3.x,Python 3.6,Pytz,因此,我有以下代码: import pytz from datetime import datetime tz = pytz.timezone('Asia/Singapore') original_time = tz.localize(datetime.now()) original_epoch = original_time.timestamp() converted_dt = tz.localize(datetime.utcfromtimestamp(original_epoch))

因此,我有以下代码:

import pytz
from datetime import datetime


tz = pytz.timezone('Asia/Singapore')

original_time = tz.localize(datetime.now())
original_epoch = original_time.timestamp()
converted_dt = tz.localize(datetime.utcfromtimestamp(original_epoch))
converted_epoch = converted_dt.timestamp()

print('{}\t\t{}'.format(original_time, original_epoch))
print('{}\t\t{}'.format(converted_dt, converted_epoch))
它吐出来了

# Original Time                         Original Epoch
2018-07-16 02:17:41.583510+08:00        1531678661.58351
2018-07-15 18:17:41.583510+08:00        1531649861.58351
# Converted Time                        Converted Epoch
这是一个Python错误还是我只是遗漏了什么?无论哪种方式,我如何才能将datetime转换为历元,并确信自己回到了正确的时间?

tz.localize()
不会对给定的
日期时间执行任何时区调整;它只是将其
tzinfo
设置为给定的时区。对于您正在使用的时间戳,这意味着
tz.localtime()
执行以下操作:

 datetime.now()                           ->  tz.localize(datetime.now())
 2018-07-16 02:17:41.583510                   2018-07-16 02:17:41.583510+08:00

 datetime.utcfromtimestamp(original_epoch) -> tz.localize(datetime.utcfromtimestamp(original_epoch))
 2018-07-15 18:17:41.583510                -> 2018-07-15 18:17:41.583510+08:00
请注意,时间不会改变;只有时区偏移量可以。因为
tz.localize()
的输入是两个不同的初始时间,所以您会得到两个不同的感知时间

从UNIX时间戳和时区构造
datetime
的正确方法是与两个参数一起使用:

>>> print(datetime.fromtimestamp(1531678661.58351, pytz.timezone('Asia/Singapore')))
2018-07-16 02:17:41.583510+08:00

谢谢Jwodder!我整晚都在想办法解决这个问题。