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

Fre*_*ers 5 python timezone datetime pytz

看似简单,但我无法让它发挥作用。我已经尝试过pytz.timezone('timezone').localize(dt.datetime().now())dt.datetime.now().astimezone(pytz.timezone('timezone'))以及许多其他片段,但是它们都创建了一个日期时间对象<my time>+/-timedifference

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

编辑:

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

Jos*_*ilo 11

像这样的东西?

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

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>)
Run Code Online (Sandbox Code Playgroud)

  • 这是一篇[不错的博客文章](https://blog.ganssle.io/articles/2018/03/pytz-fastest-footgun.html),它提供了有关 pytz“功能”的一些背景知识。如果您使用 dateutil 或 zoneinfo (py 3.9) 获取 tz 对象,则替换可以正常工作。然而,再次阅读这个问题,OP似乎还有其他什么(请参阅我对这个问题的评论)。 (4认同)