Python pytz:不存在的时间得到 AmbiguousTimeError,而不是 NonExistentTimeError

Posted

技术标签:

【中文标题】Python pytz:不存在的时间得到 AmbiguousTimeError,而不是 NonExistentTimeError【英文标题】:Python pytz: non-existent time gets AmbiguousTimeError, not NonExistentTimeError 【发布时间】:2012-11-02 04:45:13 【问题描述】:

如何判断当地时间是否不存在?我正在尝试使用 pytz,但它会引发 AmbiguousTimeError,而不是 NonExistentTimeError。

由于夏令时,2013-3-31 02:30 永远不会在哥本哈根发生。

local_tz = timezone('Europe/Copenhagen')
try:
    non_e = local_tz.localize(datetime.datetime(2013, 3, 31, 2, 30), is_dst = None) 
except pytz.AmbiguousTimeError:
    print "AmbiguousTimeError"

它转到异常处理程序。我试过了:

 except pytz.NonExistentTimeError: #'module' object has no attribute 'NonExistentTimeError'
 except pytz.exceptions.NonExistentTimeError: #'module' object has no attribute 'exceptions'

用户通过表单向我提供日期和时间。这些是当地时间,我需要看看日期和时间是否合适。

我将 Django 与 USE_TZ = True 一起使用,但我认为这在这里并不重要。

【问题讨论】:

pytz 模块是什么版本的?我确实有 NonExistentTimeError 异常。 2006p 版。你的是什么? 我从另一个答案中看到我的版本真的很旧。我两天前在这里下载了它:sourceforge.net/projects/pytz我会四处寻找更新的。 如我的回答中所列:2012d。你落后了 6 年。 :-P documentation 指向PyPI。 【参考方案1】:

升级您的pytz 软件包。这适用于我的版本2012d,例如:

>>> import pytz, datetime
>>> pytz.__version__
'2012d'
>>> local_tz = pytz.timezone('Europe/Copenhagen')
>>> local_tz.localize(datetime.datetime(2013, 3, 31, 2, 30), is_dst=None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pytz/tzinfo.py", line 327, in localize
    raise NonExistentTimeError(dt)
pytz.exceptions.NonExistentTimeError: 2013-03-31 02:30:00

使用pip install -U pytzeasy_install -U pytz 进行升级。

【讨论】:

我的是 2006 年的。它真的很老了。我两天前在这里下载了它:sourceforge.net/projects/pytz 那似乎是一个可以更新的地方。我会四处寻找新的。 改为从pypi.python.org/pypi/pytz(Python 包索引)下载。 不确定这应该是公认的答案。它可能对某些人有所帮助,但我的版本是 2017.2,我在 pytz.exceptions.AmbiguousTimeError: 2015-11-01 01:10:07 @shacker:但那是一个模棱两可的时间。在 11 月,时钟返回1:10:07 出现两次。该时间戳确实存在,但它同时存在于夏令时 (DST=1) 和标准时间 (DST=0)。

以上是关于Python pytz:不存在的时间得到 AmbiguousTimeError,而不是 NonExistentTimeError的主要内容,如果未能解决你的问题,请参考以下文章

python不正确的时区转换使用pytz

使用 pytz 时区时 Python 日期时间不包括 DST

Pytz Python时区转换不起作用

使用 pytz 和 datetime 在 python 中获取 27/02/2019 00:00 US/Eastern 的时间戳

Python pytz:将本地时间转换为 UTC。本地化似乎没有转换

python 关于时区