在我正在开发的Python项目中,我希望能够获得一个"人类可读"的时区名称,其形式为America/New_York,对应于系统本地时区,以显示给用户.我看到的访问时区信息的每一段代码只返回数字偏移量(-0400)或字母代码(EDT),有时两者都返回.是否有一些Python库可以访问这些信息,如果没有,可以将偏移/字母代码转换为人类可读的名称?
如果有一个以上对应于特定时区的人类可读名称,则可能结果列表或其中任何一个都可以,如果没有与当前时区对应的人类可读名称,我将采取无论是异常或None或[]或什么的.
unu*_*tbu 10
以下生成defaultdict映射时区偏移(例如'-0400')和缩写(例如'EDT')到公共地理时区名称(例如'America/New_York').
import os
import dateutil.tz as dtz
import pytz
import datetime as dt
import collections
result=collections.defaultdict(list)
for name in pytz.common_timezones:
timezone=dtz.gettz(name)
now=dt.datetime.now(timezone)
offset=now.strftime('%z')
abbrev=now.strftime('%Z')
result[offset].append(name)
result[abbrev].append(name)
print(result)
Run Code Online (Sandbox Code Playgroud)
请注意,时区缩写的含义可能大不相同.例如,'EST'可代表澳大利亚的东部夏令时(UTC + 10)或北美的东部标准时间(UTC-5).
此外,对于使用日光标准时间的区域,偏移和缩写可能会发生变化.因此,保存静态字典可能无法一年365天提供正确的时区名称.
http://pytz.sourceforge.net/可能会有所帮助.如果不出意外,您可以获取所有时区的列表,然后迭代直到找到与您的偏移相匹配的时区.
我希望能够获得一个"人类可读"的时区名称,其形式为America/New_York,对应于系统本地时区,以显示给用户.
有一个tzlocal模块返回一个pytz对应于系统本地时区的tzinfo对象:
#!/usr/bin/env python
import tzlocal # $ pip install tzlocal
print(tzlocal.get_localzone().zone) # display "human-readable" name (tzid)
# -> Europe/Moscow
Run Code Online (Sandbox Code Playgroud)
要回答标题中的问题(对于谷歌的人),您可以使用%Z%z打印本地时区信息:
#!/usr/bin/env python
import time
print(time.strftime('%Z%z'))
# -> MSK+0300
Run Code Online (Sandbox Code Playgroud)
它打印当前时区缩写和与当地时区对应的utc偏移量.
最初编写此问题时,这可能还没有出现,但这里有一段用于获取时区官方名称的片段:
>>> 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 模块站点上查看更多信息。