非UTC日期时间对象的时间戳是减去两个小时的时间

问题描述 投票:2回答:2

我有以下时间戳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)

但是我得到了qazxsw poi(UTC或GMT -6),我不知道为什么。

谁能解释一下?我的直觉告诉我,这可能是一个我不看的简单事情,但我已经花了几分钟时间,我还没有说清楚。

python python-2.7 datetime timezone unix-timestamp
2个回答
2
投票

如果你看看2019-02-19 09:04:16-03:00

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

所以问题是它已经在从UTC转换到本地时间,而你第二次这样做了。


0
投票

首先,你有epoc时间(UTC时间戳)。您需要将其转换为datetime对象(本机),然后将本机时间转换为感知时间,最后将其转换为本地时间。

  1. 将时间戳转换为本机日期时间对象 the documentation for fromtimestamp
  2. 将原生日期时间对象转换为识别时间(添加时区信息,将时区信息添加到当前时区UTC) native_datetime = datetime.fromtimestamp(1550588656)
  3. 将感知日期时间本地化到您当地的日期时间 import pytz utc_time = native_datetime.replace(tzinfo=pytz.timezone("UTC")) 您可以将“America / Santiago”替换为您当地的时区

我认为这可以帮助您解决问题。谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.