【问题标题】:pytz.exceptions.UnknownTimeZoneError when loading pytz with zipimport in Python在 Python 中使用 zipimport 加载 pytz 时出现 pytz.exceptions.UnknownTimeZoneError
【发布时间】:2015-07-02 06:14:40
【问题描述】:

我正在尝试在 python 脚本中使用 pytz,以用作 hadoop 流作业的映射器。

按照另一个线程中的建议,我尝试将 pytz 打包为 zip 'pytz.mod',并使用 zipimport 加载它:

import zipimport

importer = zipimport.zipimporter('pytz.mod')
pytz = importer.load_module('pytz')

from pytz import timezone
user_timezone = timezone('America/Moncton')

这会产生以下错误:

Traceback (most recent call last):
  File "./load-pytz.py", line 15, in <module>
    user_timezone = timezone('America/Moncton')
  File "./lib/python2.6/site-packages/pytz/__init__.py", line 180, in timezone
pytz.exceptions.UnknownTimeZoneError: 'America/Moncton'

我找到this thread,问题似乎是zipimport 无法加载zoneinfo 目录中的二进制文件。我试图按照线程中的说明进行操作,但无法让它们工作。有没有更简单的打包zoneinfo的机制,不用经过py2exe?

我需要做的就是本地化相对于时区的 UTC 时间戳,例如“美国/蒙克顿”。

谢谢!

【问题讨论】:

    标签: python hadoop timezone pytz


    【解决方案1】:

    你试过 tzlocal 吗?从我读到的Here 来看,pytz 会给出一个未知的时区错误,原因有几个。 - 如果你没有给它一个时区名称,或者你给它的时区名称,取决于你的操作系统,与 pytz 使用的时区名称不同。使用 tzlocal 将您的本地时区作为 tzinfo 对象检索,以正常与 pytz 一起使用,应该可以让您继续您的项目。

    如我上面放置的链接所示,您可以通过

    from tzlocal import get_localzone
     tz = get_localzone()
    

    我不自称是专家,只是自己做一些研究,试图帮助有需要的人。希望对您有所帮助。

    【讨论】:

    • tzlocal 很棒,但我不确定它与提出的问题有什么关系。
    • 我的理解是操作无法获得 pytz 可以识别的时区,因此导致了他的问题,如果我不正确,请原谅,我认为错误是在他们没有收到本地时区之内。跨度>
    • 我应该在发布之前检查 pytz 的时区名称,但是我想现在 tzlocal 已经传播给任何可能有帮助的人。对于错误的答案,我向所有人道歉。
    • 感谢您的回复!我确实已经知道时区,但我确实不需要使用 pytz。在这篇文章之后,我可以简单地使用 python-dateutil 库:stackoverflow.com/questions/4770297/…
    猜你喜欢
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多