如何从
Python中的给定UTC偏移量中获取时区名称?
例如,我有,
"GMT+0530"
我想得到,
"Asia/Calcutta"
如果有多个匹配项,则结果应为时区名称列表.
最佳答案 可能存在零个或多个(多个)时区,其对应于单个UTC偏移.要查找现在具有给定UTC偏移的这些时区:
#!/usr/bin/env python
from datetime import datetime, timedelta
import pytz # $pip install pytz
utc_offset = timedelta(hours=5, minutes=30) # +5:30
now = datetime.now(pytz.utc) # current time
print({tz.zone for tz in map(pytz.timezone, pytz.all_timezones_set)
if now.astimezone(tz).utcoffset() == utc_offset})
产量
set(['Asia/Colombo', 'Asia/Calcutta', 'Asia/Kolkata'])
如果您想要考虑历史数据(根据当前时区规则在某个日期具有/将具有给定utc偏移的时区):
#!/usr/bin/env python
from datetime import datetime, timedelta
import pytz # $pip install pytz
utc_offset = timedelta(hours=5, minutes=30) # +5:30
names = set()
now = datetime.now(pytz.utc)
for tz in map(pytz.timezone, pytz.all_timezones_set):
dt = now.astimezone(tz)
tzinfos = getattr(tz, '_tzinfos',
[(dt.utcoffset(), dt.dst(), dt.tzname())])
if any(off == utc_offset for off, _, _ in tzinfos):
names.add(tz.zone)
print("\n".join(sorted(names)))
产量
Asia/Calcutta
Asia/Colombo
Asia/Dacca
Asia/Dhaka
Asia/Karachi
Asia/Kathmandu
Asia/Katmandu
Asia/Kolkata
Asia/Thimbu
Asia/Thimphu