提问人:Bubble3D 提问时间:8/13/2023 更新时间:8/14/2023 访问量:84
UTC 纪元到 Python 时区感知日期时间对象 [复制]
utc epoch to python timezone aware datetime object [duplicate]
问:
我们将时间值存储在数据库中,作为 UTC 的 13 位 unix 纪元。 因此,当我获取这些值以在 python 中处理时,我需要它们对时区敏感。
例如,当我将纪元值转换为 datetime 时,它会给我一个 naïve(时区不敏感)datetime 对象。 之后,一旦尝试将其转换为其他原生时间格式,就会搞砸计算。(因为我的本地电脑不在UTC时区)
>>>from datetime import datetime
>>>dt = datetime.utcfromtimestamp(1691868688457/1000)
>>>dt.astimezone(pytz.timezone('America/Chicago'))
输出结果为:
datetime.datetime(2023, 8, 12, 9, 1, 28, 457000, tzinfo=<DstTzInfo 'America/Chicago' CDT-1 day, 19:00:00 DST>)
它应该是:
datetime.datetime(2023, 8, 12, 14, 31, 28, 457000, tzinfo=<DstTzInfo 'America/Chicago' CDT-1 day, 19:00:00 DST>)
有没有办法以时区敏感的方式读取纪元值?现在我只是以一种粗略的方式转换它,例如:
dt = datetime(year=dt.year, month=dt.month, day=dt.day,
hour=dt.hour, minute=dt.minute, second=dt.second,
microsecond=dt.microsecond, tzinfo=pytz.utc)
答:
2赞
sky
8/13/2023
#1
改用带有参数的 fromtimestamp 来获取感知对象:tz
datetime
返回 POSIX 时间戳对应的本地日期和时间,例如 time.time() 返回。如果可选参数 tz 为 None 或未指定,则时间戳将转换为平台的本地日期和时间,并且返回的 datetime 对象是幼稚的。
如果 tz 不是 None,则它必须是 tzinfo 子类的实例,并且时间戳将转换为 tz 的时区。
>>> from datetime import timezone
>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime
>>> dt = datetime.fromtimestamp(1691868688457/1000, timezone.utc)
>>> dt
datetime.datetime(2023, 8, 12, 19, 31, 28, 457000, tzinfo=datetime.timezone.utc)
>>> dt.astimezone(ZoneInfo("America/Chicago"))
datetime.datetime(2023, 8, 12, 14, 31, 28, 457000, tzinfo=zoneinfo.ZoneInfo(key='America/Chicago'))
评论
utcfromtimestamp