首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非UTC Datetime对象的时间戳是减小时两次。

非UTC Datetime对象的时间戳是减小时两次。
EN

Stack Overflow用户
提问于 2019-02-19 15:37:11
回答 2查看 132关注 0票数 2

我有下面的时间戳1550588656,它在UTC时间约定中转换为2019-02-19 15:04:16+00:00

我想把它转换成我国家的时间会议(每年这个时候是UTC或GMT -3 ),所以它应该翻译成2019-02-19 12:04:16+00:00

我读过其他一些问题,首先我必须将时间戳转换成一个UTC感知的Datetime对象,然后本地化它,我这样做

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

所以现在它不是一个天真的日期时间对象,从这里开始,我应该能够将它定位到我国的时区。在Python中,这是pytz.timezone('America/Santiago')

所以应该是这样的

代码语言:javascript
复制
cltime = pytz.timezone('America/Santiago')
local_datetime = utc_datetime.astimezone(cltime)

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

有人能解释一下吗?我的直觉告诉我,这可能是一个简单的事情,我没有看到,但我已经花了一些时间在其中,我还没有能够说出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-19 16:01:05

如果你看看fromtimestamp

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

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

票数 2
EN

Stack Overflow用户

发布于 2019-02-19 16:31:58

首先,您有epoc时间(UTC时间戳)。您需要将其转换为datetime对象(本机),然后将本机时间转换为知道的时间,而不是最终将其转换为本地时间。

  1. 将时间戳转换为本机 datetime对象 native_datetime = datetime.fromtimestamp(1550588656)
  2. 本机日期时间对象转换为感知的时间(添加时区信息,将时区信息添加到当前的本地时区UTC ) 进口pytz utc_time = native_datetime.replace(tzinfo=pytz.timezone("UTC"))
  3. 感知的日期时间本地化到本地日期时间 local_time = utc_time.astimezone(pytz.timezone("America/Santiago")) 可以用本地时区替换"America/Santiago"

我想这能帮你解决问题。谢谢!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54769924

复制
相关文章

相似问题

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