Python get current time in right timezone
本问题已经有最佳答案,请猛点这里访问。
现在我用
1 2 | import datetime print(datetime.datetime.now().strftime("%X")) |
将当前时间显示为字符串。问题是,我的计算机运行在
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对象,它也可以工作。