设置时区而不更改时间 - Python

问题描述 投票:0回答:1

看似简单,但我无法让它发挥作用。我尝试过

pytz.timezone('timezone').localize(dt.datetime().now())
dt.datetime.now().astimezone(pytz.timezone('timezone'))
以及许多其他片段,但是它们都创建了一个日期时间对象,即
<my time>+/-timedifference

如何简单地设置日期时间对象的时区以使其真正成为时区的时间?

编辑:

抱歉造成混乱,问题与我从 Postgres 数据库获取的时间有关。我认为时间很天真,但是 postgres 实际上知道时间并以 UTC 格式返回它。

python datetime timezone pytz
1个回答
14
投票

有这样的事吗?

[编辑以显示更好的示例]

[已编辑以包含

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>)
© www.soinside.com 2019 - 2024. All rights reserved.