Python 在正确的时区获取当前时间

现在我用

import datetime
print(datetime.datetime.now().strftime("%X"))

以字符串形式显示当前时间。
问题是,我的计算机在 Europe/Berlin时区运行,+ 2到 UTC 的偏移没有在这里计算。 它应该显示 21:22:26而不是 19:22:26 Also different to the other answers I found here, I do not store it by calling

datetime.datetime(2014, 7, 10, 18, 44, 59, 193982, tzinfo=<UTC>)

but

datetime.datetime.now()

所以我尝试了以下方法(但失败了) :

>>> from pytz import timezone
>>> datetime.datetime.now().astimezone(timezone('Europe/Berlin'))
ValueError: astimezone() cannot be applied to a naive datetime


编辑:

回答我

不能作为答案发布,因为这个问题被标记为闭合

我遇到这个问题的服务器已经不存在了。 不管怎样,这里还有一些值得检查的东西:

  • 服务器/系统的时区设置正确吗?
    • VM 或 docker 容器可能与主机不同步,这值得检查。
  • 计算机上的时间正确吗? 你没有在改变时区后得到 + 2小时?
165462 次浏览

要获取本地时区中作为初始日期时间对象的当前时间:

from datetime import datetime
naive_dt = datetime.now()

如果它没有返回预期的时间,那么这意味着您的计算机配置错误。您应该首先修复它(它与 Python 无关)。

要获取以 UTC 表示的当前时间作为一个初始的 datetime 对象:

naive_utc_dt = datetime.utcnow()

要在 Python 3.3 + 中获取当前时间作为一个可感知的 datetime 对象:

from datetime import datetime, timezone


utc_dt = datetime.now(timezone.utc) # UTC time
dt = utc_dt.astimezone() # local time

要从 tz 数据库获取给定时区中的当前时间:

import pytz


tz = pytz.timezone('Europe/Berlin')
berlin_now = datetime.now(tz)

它在 DST 转换期间工作。如果时区在过去具有不同的 UTC 偏移量,即使时区在不同的时间对应于多个 tzinfo 对象,它也可以工作。