从UTC偏移量获取时区名称

时间:2016-01-29 13:04:40

标签: python datetime

如何从Python中的给定UTC偏移量中获取时区名称?

例如,我有,

"GMT+0530"

我想得到,

"Asia/Calcutta"

如果有多个匹配项,则结果应为时区名称列表。

2 个答案:

答案 0 :(得分:10)

零个或多个 (多个)时区可能对应 单个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

答案 1 :(得分:-1)

您可以简单地将时间偏移与相应时间偏移和区域的字典进行比较。 像这样:

#Initialize a dict
stuff = {}
#Add stuff to your dict
stuff["GMT+0530"] = "Asia/Calcutta"
#Look up your time offset
print stuff["GMT+0530"]

正如jonrsharpe建议的那样,映射不是一对一的,在这种情况下意味着虽然给定区域可能具有特定的时间偏移,但特定的时间偏移不仅必须对应于地球上的一个区域。