首页 > 解决方案 > 非 UTC 日期时间对象的时间戳两次减去小时

问题描述

我有以下时间戳1550588656,转换为2019-02-19 15:04:16+00:00UTC 时间约定。

我想将其转换为我所在国家/地区的时间约定(一年中的这个时候的 UTC 或 GMT -3),因此它应该转换为2019-02-19 12:04:16+00:00

我已阅读其他 SO 问题,首先我必须将时间戳转换为可感知 UTC 的 Datetime 对象,然后对其进行本地化,我正在这样做

# string format time
naive_datetime = datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')

# string parse time
naive_datetime = datetime.strptime(naive_datetime, "%Y-%m-%d %H:%M:%S")

# make naive Datetime object UTC aware
utc_datetime = naive_datetime.replace(tzinfo=pytz.UTC)

所以现在它不是一个天真的 Datetime 对象,从这里我应该能够将它本地化到我国家的时区。在Python中pytz.timezone('America/Santiago')

所以它应该是这样的

cltime = pytz.timezone('America/Santiago')
local_datetime = utc_datetime.astimezone(cltime)

但我得到2019-02-19 09:04:16-03:00(UTC or GTM -6 ) 结果,我不知道为什么。

有人可以解释吗?我的直觉告诉我,这可能是一件我没有看的简单事情,但我已经花了几分钟时间,但我还不能说出来。

标签: pythonpython-2.7datetimetimezoneunix-timestamp

解决方案


如果您查看以下文档fromtimestamp

返回POSIX 时间戳对应的本地日期和时间

所以问题是它已经在进行从 UTC 到本地时间的转换,而您正在第二次这样做。


推荐阅读