首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python纪元-日期时间转换错误?

Python纪元-日期时间转换错误?
EN

Stack Overflow用户
提问于 2018-07-16 02:22:32
回答 1查看 114关注 0票数 2

所以我有以下代码:

代码语言:javascript
复制
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))

它就会吐出来

代码语言:javascript
复制
# 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 bug,还是我只是遗漏了什么?无论哪种方式,我如何才能在datetime和epoch之间来回转换,并确信我得到了正确的时间呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-16 02:54:47

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

代码语言:javascript
复制
 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的正确方法是使用带有两个参数的datetime.fromtimestamp()

代码语言:javascript
复制
>>> print(datetime.fromtimestamp(1531678661.58351, pytz.timezone('Asia/Singapore')))
2018-07-16 02:17:41.583510+08:00
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51350989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档