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

时间:2014-09-14 20:00:25

标签: python time timezone

现在我用

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

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

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

但是

datetime.datetime.now()

所以我尝试了(并且失败了)以下内容:

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


编辑:

答案

无法发布回答,因为此问题已标记为已关闭

我遇到此问题的服务器不再存在。 无论如何,这里有一些值得检查的事情:

  • 您的服务器/系统的时区是否设置正确?
    • docker容器可能与主机不同步,值得检查。
  • 时间是否正确?更改时区后,您最终还没有达到+2小时?

1 个答案:

答案 0 :(得分:88)

要将本地时区的当前时间作为天真的日期时间对象获取:

from datetime import datetime
naive_dt = datetime.now()

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

以UTC为天然日期时间对象获取当前时间:

naive_utc_dt = datetime.utcnow()

在Python 3.3 +中获取当前时间作为有意识的日期时间对象:

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对象,它也能工作。