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

时间:2011-05-10 07:17:30

标签: python django timezone pytz

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

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

4 个答案:

答案 0 :(得分:36)

  

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

如果您需要来自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' >>> ...

{{1}}

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

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

首先是:

>>> 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'

答案 3 :(得分:0)

最初写这个问题的时候可能还没有出现,但这是获得时区官方名称的摘录:

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

此外,它可以与非原始datetime对象一起使用(也就是使用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