从UTC偏移量获取时区缩写

时间:2013-10-08 15:05:22

标签: python timezone

我的数据库中为用户提供了UTC偏移量:

+5:30 

如何使用Python从此UTC偏移中获取时区缩写?

+5:30 => IST

甚至可以使用Python来做到这一点吗?

3 个答案:

答案 0 :(得分:5)

这是不可能的。

  • 有许多时区共享相同的偏移量。 See this Wikipedia article for details

  • 时区缩写没有统一的标准。列出了herehere,您可以看到两个方向都有重复。

    例如:

    • CST可能是-5:00,6:00,+ 8:00,+ 9:30或+10:30。
    • -10:00可能是HST,HAST,TAHT或CKT

另请阅读StackOverflow上timezone tag wiki的“时区!=偏移”部分。

答案 1 :(得分:1)

您可以获得与 对应的时区缩写集( 零或更多 )(在the tz database中指定)给定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({now.astimezone(tz).tzname() 
       for tz in map(pytz.timezone, pytz.all_timezones_set)
       if now.astimezone(tz).utcoffset() == utc_offset})

输出

set(['IST'])

如果您想获得包含历史数据的缩写:

#!/usr/bin/env python
from datetime import datetime, timedelta
import pytz # $ pip install pytz

utc_offset = timedelta(hours=5, minutes=30) # +5:30
abbr = 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())])
    abbr.update(tzname for off, _, tzname in tzinfos if off == utc_offset)
print(abbr)

输出

set(['IST'])

答案 2 :(得分:0)

正如马特所说,从偏移到时区并没有多大意义。

如果您希望为给定的偏移找到合适的pytz.timezone对象:

时区范围从let traits = view.traitCollection if traits.userInterfaceIdiom == .Pad && traits.horizontalSizeClass == .Regular { let animations: () -> Void = { self.splitViewController?.preferredDisplayMode = .PrimaryHidden } let completion: Bool -> Void = { _ in self.splitViewController?.preferredDisplayMode = .Automatic } UIView.animateWithDuration(0.3, animations: animations, completion: completion) } "Etc/GMT-14"

只需查看"Etc/GMT+12"

使用这些,我能够使用错误的客户端输入(错误时区偏移)将有效的时区对象附加到我的用户。