1

定时区缩写,有没有办法获得可能的 时区列表?

IST可能意味着以下之一:

  • 亚洲/加尔各答(印度)
  • 亚洲/特拉维夫(以色列)
  • 欧洲/都柏林(爱尔兰)

我一直在寻找的是一种在['Asia/Kolkata', 'Asia/Tel_Aviv', 'Europe/Dublin']作为输入时获得输出的方法'IST'

我希望有一种方法可以使用标准模块本身。可以用新zoneinfo模块完成吗?

受到这个答案的启发,我做到了

from datetime import datetime as dt                                                                                                      
import zoneinfo                                                                                                                 
s = zoneinfo.available_timezones()                                                                                                              
d = dict()                                                                                                                               
for tz in s:                                                                                                                             
    t = z.ZoneInfo(tz).tzname(dt.utcnow())                                                                                                                                                                                                                          
    if t not in d:                                                                                                                       
        d[t] = [tz]                                                                                                                      
    else:                                                                                                                                
        d[t].append(tz)                                                                                                                  

但这是给'PDT'作为

 'PDT': ['America/Ensenada',                                                                                                             
         'America/Santa_Isabel',                                                                                                         
         'Mexico/BajaNorte',                                                                                                             
         'US/Pacific-New',                                                                                                               
         'US/Pacific',                                                                                                                   
         'America/Vancouver',                                                                                                            
         'PST8PDT',                                                                                                                      
         'America/Tijuana',                                                                                                              
         'America/Los_Angeles',

和“PST”一样

 'PST': ['Asia/Manila'], 

但是“America/Los_Angeles”在某些时候不会也属于“PST”(不是现在,而是稍后)。

我显然错过了一些东西,但无法理解它是什么..

                                                                                                            Can there be a way to get the list of possible timezones from a time zone abbreviation?
4

1 回答 1

0

以一种天真的方法扩展链接的答案,您可以生成特定年份的查找表,例如

from collections import defaultdict
from datetime import datetime, timedelta
import zoneinfo

year = 2021
checkdays = [datetime(year, 1, 1) + timedelta(i) for i in range(0, 365, 5)]

abbreviationmap = defaultdict(set)

for d in checkdays:
    for z in zoneinfo.available_timezones():
        abbreviationmap[zoneinfo.ZoneInfo(z).tzname(d)].add(z)
        
print(sorted(abbreviationmap['PDT']))
# ['America/Ensenada', 'America/Los_Angeles', 'America/Santa_Isabel', 
#  'America/Tijuana', 'America/Vancouver', 'Canada/Pacific', 'Mexico/BajaNorte', 
#  'PST8PDT', 'US/Pacific']
于 2021-06-21T14:05:55.310 回答