如何获得pytz时区的通用名称,例如.EST/EDT for America/New_York

Sid*_*tra 35 python django timezone pytz

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

pytz会在某处给我那些标准名称,还是我必须通过表格手动执行此操作?这可能会变得混乱,因为例如,一个季节的地方是EST,而在其他地方转移到显示EDT.

Mik*_*ton 37

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

如果你需要这个派生自一个datetime本地化的对象pytz...

>>> 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'
>>> 
Run Code Online (Sandbox Code Playgroud)

  • 如果输入的初始日期时间不明确或不存在(例如在DST转换期间),则.localize可能返回错误结果。使用“ is_dst = None”来断言输入时间是明确的。 (2认同)
  • 有没有办法从“ CDT”回到具有“ America / Chicago”时区的时区对象? (2认同)

ing*_*ere 8

当这个问题最初编写时,这可能还没有出现,但这里有一个获取时区官方名称的片段:

>>> eastern = timezone('US/Eastern')
>>> eastern.zone
'US/Eastern'
Run Code Online (Sandbox Code Playgroud)

此外,这可以与非天真的日期时间对象(又名日期时间,其中实际时区已使用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'
Run Code Online (Sandbox Code Playgroud)

当然,这是为了启发那些登陆这里的搜索引擎用户。...在pytz 模块站点上查看更多信息。


Phi*_*ham 7

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

首先是:

>>> from pytz import timezone
>>> eastern = timezone('US/Eastern')
>>> eastern._tzname
'EST'
Run Code Online (Sandbox Code Playgroud)

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

>>> from datetime import datetime
>>> loc_dt = eastern.localize(datetime.now())
>>> loc_dt.strftime('%Z')
'EST'
Run Code Online (Sandbox Code Playgroud)

  • 在 DST 转换期间,“eastern.localize(datetime.now())”可能会给出错误的结果,请改用“datetime.now(eastern)”。 (4认同)

Mic*_*kis 6

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

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