在不更改时间的情况下设置时区 - Python

Posted

技术标签:

【中文标题】在不更改时间的情况下设置时区 - Python【英文标题】:Set timezone without changing time - Python 【发布时间】:2021-01-31 01:25:05 【问题描述】:

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

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

编辑:

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

【问题讨论】:

@Edit:这是一个很好的例子,为什么时间戳应该包含时区指示(UTC 偏移量);-) 【参考方案1】:

这样的?

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

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>)

【讨论】:

这将为您提供非 UTC/GMT 时区的 LMT。顺便提一句。 EST 不是时区,它只是出于历史原因在 pytz 数据库中。 你是对的,但生成的对象具有相同的小时/分钟/等(我相信这是原始问题)。它只是具有不同表示的时区对象。我错过了什么吗? 这里有一个nice blog post,它提供了有关此 pytz“功能”的一些背景信息。如果您使用 dateutil 或 zoneinfo (py 3.9) 来获取 tz 对象,则替换可以正常工作。然而,再次阅读这个问题,似乎 OP 有什么别的东西(见我对这个问题的评论)。

以上是关于在不更改时间的情况下设置时区 - Python的主要内容,如果未能解决你的问题,请参考以下文章

在不使用字符串的情况下在 javascript 中获取另一个时区的时区偏移量

在不更改 Windows 区域设置的情况下更改应用程序的区域设置

如何在不更改路径环境变量的情况下安装 python 包?

openSUSE:在不更改默认版本的情况下安装 python 的替代版本

如何在不更改用户设置的缩放比例的情况下更新地图标记?

在不使用代码的情况下更改 Windows 区域设置/文化