【问题标题】:How to get the common name for a pytz timezone eg. EST/EDT for America/New_York如何获取 pytz 时区的通用名称,例如。美国/纽约的 EST/EDT
【发布时间】:2011-08-22 05:39:13
【问题描述】:

给定特定用户的 pytz 时区(从他的偏移量计算),我想显示该时区的通用名称。我假设人们更习惯于看到 ESTPST,而不是像 America/NewYork 这样的拼写。

pytz 是否在某处给了我这些标准名称,还是我必须通过表格手动执行此操作?这可能会变得混乱,因为例如某个季节的地点是美国东部标准时间,而其他地点则转为显示美国东部时间。

【问题讨论】:

  • 请注意,通用名称不是唯一的,只有在完全清楚您所在的国家/地区时才应使用。例如,澳大利亚也有 EST。
  • @LennartRegebro:即使在同一个国家,EST may correspond to different timezones (with different UTC offsets)
  • @LennartRegebro:真的吗?我试图了解这些事情,所以我很想知道一些例子。您不是指昆士兰州(总是 EST,从不是 EDT)和亚利桑那州(总是 USMST(尽管有第一民族领土),从不是 USMDT),对吗?
  • 我的意思是有几个国家的时区称为“EST”,因此这些名称实际上并不能告诉你它是哪个时区,除非你也知道哪个国家。

标签: python django timezone pytz


【解决方案1】:

给定特定用户的 pytz 时区(从他的偏移量计算),我想显示该时区的通用名称。我假设人们更习惯于看到 EST 或 PST,而不是像 America/NewYork 这样拼写出来。

如果您需要从使用 pytz 本地化的 datetime 对象派生...

>>> import pytz as tz
>>> from datetime import datetime as dt
>>> CT = tz.timezone('America/Chicago')
>>>
>>> summer_day = dt(2010, 7, 4, 0, 1, 1)
>>> bar = CT.localize(summer_day, is_dst=None)
>>> bar.tzname()
'CDT'
>>>
>>> christmas = dt(2010, 12, 25, 0, 1, 1)
>>> foo = CT.localize(christmas, is_dst=None)
>>> foo.tzname()
'CST'
>>> 

【讨论】:

  • .localize 如果输入的原始日期时间不明确或不存在,例如在 DST 转换期间,可能会返回错误结果。使用is_dst=None 断言输入时间是明确的。
  • 有没有办法从'CDT' 回到带有'America/Chicago' 时区的时区对象?
【解决方案2】:

你可以使用tzinfo实例的tzname()方法:

>>> tz = timezone('America/St_Johns')
>>> normal = datetime(2009, 9, 1)
>>> tz.tzname(normal, is_dst=False)
'NDT'

【讨论】:

    【解决方案3】:

    如果您正在寻找缩写词,那么可以想到几种方法。

    首先是:

    >>> from pytz import timezone
    >>> eastern = timezone('US/Eastern')
    >>> eastern._tzname
    'EST'
    

    尽管由于它引用了带有前面单个下划线的属性,它可能被认为是私有的,并且可能不是获取它的最佳位置。另一个来自本地化的日期时间对象。

    >>> from datetime import datetime
    >>> loc_dt = eastern.localize(datetime.now())
    >>> loc_dt.strftime('%Z')
    'EST'
    

    【讨论】:

    • eastern.localize(datetime.now()) 在 DST 转换期间可能会给您错误的结果,请改用 datetime.now(eastern)
    【解决方案4】:

    这个问题最初写的时候可能没有,但是这里有一个sn-p来获得时区官方指定:

    >>> eastern = timezone('US/Eastern')
    >>> eastern.zone
    'US/Eastern'
    

    此外,这可以与非天真的日期时间对象一起使用(也就是使用pytz.<timezone>.localize(<datetime_object>)datetime_object.astimezone(pytz.<timezone>) 设置实际时区的日期时间,如下所示:

    >>> import datetime, pytz
    >>> todaynow = datetime.datetime.now(tz=pytz.timezone('US/Hawaii'))
    >>> todaynow.tzinfo # turned into a string, it can be split/parsed
    <DstTzInfo 'US/Hawaii' HST-1 day, 14:00:00 STD>
    >>> todaynow.strftime("%Z")
    'HST'
    >>> todaynow.tzinfo.zone
    'US/Hawaii'
    

    这当然是为了教育那些登陆这里的搜索引擎用户。 ...在pytz module site 上查看更多信息。

    【讨论】:

      猜你喜欢
      • 2019-11-27
      • 2012-04-02
      • 2019-04-25
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      相关资源
      最近更新 更多