我有以下时间戳记1550588656
,它按照UTC时间约定转换为2019-02-19 15:04:16+00:00
。
我想将其转换为我所在国家/地区的时间惯例(一年中的该时间为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或GTM -6),我不知道为什么。
有人可以解释吗?我的直觉告诉我,这可能是一件简单的事情,我没看过,但是我花了几分钟,但我还没能说出来。
答案 0 :(得分:2)
如果您查看the documentation for fromtimestamp
:
返回与POSIX时间戳相对应的本地日期和时间
所以问题在于它已经在进行从UTC到当地时间的转换,而您正在第二次进行。
答案 1 :(得分:0)
首先,您具有epoc时间(UTC时间戳)。您需要将其转换为datetime对象(本机),然后将本地时间转换为感知时间,最后将其转换为本地时间。
将时间戳转换为本地日期时间对象
native_datetime = datetime.fromtimestamp(1550588656)
将本地日期时间对象转换为意识到时间(添加时区信息,会将当前时区信息添加到本地时区UTC )
import pytz
utc_time = native_datetime.replace(tzinfo=pytz.timezone("UTC"))
将知道日期时间本地化为您的本地日期时间
local_time = utc_time.astimezone(pytz.timezone("America/Santiago"))
您可以将“美国/圣地亚哥” 替换为您的本地时区
我认为这将帮助您解决问题。谢谢!