繁体   English   中英

Python时代-日期时间转换错误?

[英]Python epoch - datetime conversion bug?

所以我有以下代码:

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的错误,还是我只是缺少一些东西? 无论哪种方式,我如何才能将日期时间转换为纪元并自信地返回正确的时间呢?

tz.localize()不会对给定的datetime进行任何时区调整; 它只是将其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()的输入是两个不同的tz.localize()时间,所以您会得到两个不同的感知时间。

从UNIX时间戳和时区构造datetime时间的正确方法是使用带有两个参数的datetime.fromtimestamp()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM