如何获取pytz时区的常用名称,例如美东时间的EST/EDT
假设我有一个用户的时区信息(是根据他的时区偏移计算出来的),我想显示这个时区的常用名称。我觉得大家更习惯看到EST或者PST这样的缩写,而不是像America/NewYork这样写出来。
请问pytz有没有提供这些标准名称?还是说我需要自己手动查表来找?这样做可能会比较麻烦,因为比如有些地方在某个季节是EST,而在其他季节又会变成EDT。
4 个回答
7
如果你在找缩写的话,有几种方法可以想到。
第一种是:
>>> 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'
8
这个内容可能在最初提问时并不存在,但这里有一段代码可以用来获取时区的官方名称:
>>> 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模块网站。
51
给定一个用户的时区(是根据他的时差计算出来的),我想显示这个时区的常用名称。我觉得大家更习惯看到像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'
>>>