代码之家  ›  专栏  ›  技术社区  ›  reducing activity

如何说服datetime对象(用pytz timezone初始化)获取pytz识别的时区代码?(蟒蛇)

  •  0
  • reducing activity  · 技术社区  · 5 年前
    import pytz
    import datetime
    
    timezone = pytz.timezone('Poland')
    date = timezone.localize(datetime.datetime(2018, 10, 1))
    pytz.timezone(date.tzname())
    

    不幸的是,在python 3.5.2中,它与

    Traceback (most recent call last):
      File "timezones.py", line 6, in <module>
        pytz.timezone(date.tzname())
      File "/usr/local/lib/python3.5/dist-packages/pytz/__init__.py", line 178, in timezone
        raise UnknownTimeZoneError(zone)
    pytz.exceptions.UnknownTimeZoneError: 'CEST'
    

    在程序时区的一部分中,创建了感知时间对象。在另一部分中,需要返回时区标识符。

    为了避免xy问题:我正在使用 skyfield 图书馆。为此,我需要将时区作为参数之一传递。

    从我所看到的 https://docs.python.org/3/library/datetime.html 有一个 timezone 但是设定时区,却得不到。

    1 回复  |  直到 5 年前
        1
  •  3
  •   Alex Hill    5 年前

    TZ数据库时区名称存储为 zone 返回的区域对象的属性 pytz.timezone() :

    >>> import pytz
    >>> import datetime
    >>> 
    >>> timezone = pytz.timezone('Poland')
    >>> date = timezone.localize(datetime.datetime(2018, 10, 1))
    >>> date.tzinfo.zone
    'Poland'
    

    如您所见,区域对象本身可用为 date.tzinfo 打电话后 localize() ,因此您可以直接使用它,而不是将名称重新传递给 PytZ.TimeZONE() 如果这就是你需要它的原因。