将ms转换为datetim时应用时区

2024-05-23 15:14:21 发布

您现在位置:Python中文网/ 问答频道 /正文

在将ms解析为datetime时是否可以应用时区

我的分析正在工作,但它显示的是本地时间,而不是时区为的日期时间:

timestamp = datetime.fromtimestamp(float(dt) / 1000.0, 
                                   tz=pytz.timezone("America/Sao_Paulo"))

不确定是否发生了,因为时区来自我的操作系统


Tags: datetime时间dtfloattimestamptzmssao
2条回答

这只是将时间戳解析为您提供的tz(因此它假定dt是本地时间)。如果dt是绝对/UTC,并且要将其转换为本地时区,则需要首先将其解析为UTC datetime,然后移动其时区:

datetime.fromtimestamp(timestamp, pytz.utc).astimezone(pytz.timezone('America/Sao_Paulo'))

例如,使用1234567890

>>> datetime.fromtimestamp(ts, pytz.utc)
datetime.datetime(2009, 2, 13, 23, 31, 30, tzinfo=<UTC>)
>>> datetime.fromtimestamp(ts, pytz.utc).astimezone(pytz.timezone('America/Sao_Paulo'))
datetime.datetime(2009, 2, 13, 21, 31, 30, tzinfo=<DstTzInfo 'America/Sao_Paulo' -02-1 day, 22:00:00 DST>)

还要注意,由于各种历史原因,正确使用pytz并不像(e.g.)那样简单。如果你要经常处理时区,你可能想看看钟摆,它试图使时区操作更可靠,并提供一个更友好的API

不确定问题出在哪里,它似乎按预期工作。我的当地时间是09:02,圣保罗时区显示为10:02,这似乎是正确的

>>> import datetime, time, pytz
>>> tz_1 = pytz.timezone("America/Sao_Paulo")
>>> tz_1
<DstTzInfo 'America/Sao_Paulo' LMT-1 day, 20:54:00 STD>
>>> now = time.time()
>>> now
1554382930.1575696

>>> datetime.datetime.fromtimestamp(now)
datetime.datetime(2019, 4, 4, 9, 2, 10, 157570)
>>> datetime.datetime.fromtimestamp(now, tz=tz_1)
datetime.datetime(2019, 4, 4, 10, 2, 10, 157570, tzinfo=<DstTzInfo 'America/Sao_Paulo' -03-1 day, 21:00:00 STD>)

你能详细说明一下哪一部分没有如你所期望的那样展出吗

相关问题 更多 >