Python在正确的时区获取当前时间[重复]
Posted
技术标签:
【中文标题】Python在正确的时区获取当前时间[重复]【英文标题】:Python get current time in right timezone [duplicate] 【发布时间】:2014-11-08 08:30:13 【问题描述】:我现在用
import datetime
print(datetime.datetime.now().strftime("%X"))
将当前时间显示为字符串。
问题是,我的电脑运行在Europe/Berlin
时区,这里没有考虑到+2 到UTC 的偏移量。
它应该显示 21:22:26
而不是 19: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
编辑:
回答
无法作为答案发布,因为此问题已标记为已关闭
我遇到此问题的服务器不再存在。 不管怎样,这里还有一些值得检查的地方:
您的服务器/系统的时区设置是否正确? VM 或 docker 容器可能与主机不同步,这值得检查。 那台计算机上的时间是否正确?您不是在更改时区后 +2 小时结束了吗?【问题讨论】:
你得到了什么输出? 让我们continue this discussion in chat。 相关:How to get current time in Python @champion-runner 上面我已经导入的那个? 这是另一个问题的副本,尽管只有在这里,我找到了普通的 pytz 解决方案。由于季节性时移,另一个答案只是让我确信根本不使用任何本地时间和 pytz 。但是对于真正只想显示该地点当前时间的人来说,为什么不在这里使用这种 pytz 方式呢?重新打开? 【参考方案1】:获取本地时区的当前时间作为一个简单的日期时间对象:
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 对象,它也可以工作。
【讨论】:
pytz 现在已弃用。 ZoneInfo 在基础库中,是首选路线。示例:datetime.datetime.now(ZoneInfo("Europe/Amsterdam")) @AlexanderKellett:我没有看到pytz
被弃用 (the latest release is Feb 1, 2021) pytz
是一个久经考验的库,在复杂的极端情况下具有已知的行为。还有多个其他时区库具有不同的权衡(例如,正确性与易用性与性能)。现在,将 tz (zoneinfo) 库放在 stdlib 中非常棒,如果它适用于您的用例,请使用它。
If it doesn't return the expected time then it means that your computer is misconfigured
。什么是托管在某个远程服务器上的程序?那么datetime.now()
不会给出远程服务器的本地时间吗?
@Jdeep:当然,“本地”是指运行代码的计算机。以上是关于Python在正确的时区获取当前时间[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中获取或打印 GMT 时区的当前日期时间? [复制]