如何获取pytz时区的常用名称,例如美东时间的EST/EDT

49 投票
4 回答
65143 浏览
提问于 2025-04-16 17:20

假设我有一个用户的时区信息(是根据他的时区偏移计算出来的),我想显示这个时区的常用名称。我觉得大家更习惯看到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'
>>> 

撰写回答