看似简单,但我无法让它发挥作用。我尝试过
pytz.timezone('timezone').localize(dt.datetime().now())
、dt.datetime.now().astimezone(pytz.timezone('timezone'))
以及许多其他片段,但是它们都创建了一个日期时间对象,即 <my time>+/-timedifference
。
如何简单地设置日期时间对象的时区以使其真正成为时区的时间?
编辑:
抱歉造成混乱,问题与我从 Postgres 数据库获取的时间有关。我认为时间很天真,但是 postgres 实际上知道时间并以 UTC 格式返回它。
有这样的事吗?
[编辑以显示更好的示例]
[已编辑以包含
zoneinfo
版本]
基于
zoneinfo
的新版本(需要 Python 版本 3.9 或更高版本):
dt.datetime.now()
> datetime.datetime(2024, 8, 30, 11, 57, 35, 442646)
dt.datetime.now().replace(tzinfo=zoneinfo.ZoneInfo('Pacific/Fiji'))
> datetime.datetime(2024, 8, 30, 11, 57, 38, 873377, tzinfo=zoneinfo.ZoneInfo(key='Pacific/Fiji'))
dt.datetime.now().replace(tzinfo=zoneinfo.ZoneInfo('Europe/Stockholm'))
> datetime.datetime(2024, 8, 30, 11, 57, 40, 455853, tzinfo=zoneinfo.ZoneInfo(key='Europe/Stockholm'))
基于旧
pytz
的版本:
dt.datetime.now()
> datetime.datetime(2020, 10, 16, 15, 33, 16, 7064)
dt.datetime.now().replace(tzinfo=pytz.timezone('Pacific/Fiji'))
> datetime.datetime(2020, 10, 16, 15, 33, 18, 906361, tzinfo=<DstTzInfo 'Pacific/Fiji' LMT+11:56:00 STD>)
dt.datetime.now().replace(tzinfo=pytz.timezone('Europe/Stockholm'))
> datetime.datetime(2020, 10, 16, 15, 33, 21, 817528, tzinfo=<DstTzInfo 'Europe/Stockholm' LMT+1:12:00 STD>)