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

Python get current time in right timezone

本问题已经有最佳答案,请猛点这里访问。

现在我用

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

将当前时间显示为字符串。问题是,我的计算机运行在Europe/Berlin时区,这里没有计算+2到UTC的偏移量。它应该显示21:22:26而不是19:22:26与我在这里找到的其他答案不同的是,我没有通过调用来存储它

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

1
datetime.datetime.now()

所以我尝试了(并失败了)以下几点:

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

编辑:

回答

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

我遇到这个问题的服务器已经不存在了。无论如何,这里有一些其他值得检查的东西:

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


要获取本地时区的当前时间作为一个朴素的datetime对象:

1
2
from datetime import datetime
naive_dt = datetime.now()

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

将UTC中的当前时间作为一个朴素的datetime对象:

1
naive_utc_dt = datetime.utcnow()

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

1
2
3
4
from datetime import datetime, timezone

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

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

1
2
3
4
import pytz

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

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