Python: All possible Timezone Abbreviations for given Timezone Name (and vise versa)

Viewed 13970

Using pytz, I know how to get a listing a Timezone names, but I would like to get all possible Timezone abbreviations for each Timezone name:

import pytz
list(pytz.common_timezones)
['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa',...]

What I am looking for is given any Timezone abbreviation, example PST or PDT, ignoring current datetime (e.g. now), return the all possible Timezone name, in this case a list that would include America/Los_Angeles.

Thanks

5 Answers

Updating for py3.9+ (as discussed in PEP615), the new zoneinfo module may help:

from collections import defaultdict
from datetime import datetime as dt
from zoneinfo import available_timezones, ZoneInfo

now = dt.utcnow()
tz_key = lambda tz: ZoneInfo(tz).tzname(now)
tz_map = defaultdict(list)

for tz in available_timezones():
    tz_map[tz_key(tz)].append(tz)
tz_map = {k: sorted(v) for k, v in tz_map.items()}

e.g., print(tz_map['PDT']) would yield: ['America/Ensenada', 'America/Los_Angeles', 'America/Santa_Isabel', 'America/Tijuana', 'America/Vancouver', 'Canada/Pacific', 'Mexico/BajaNorte', 'PST8PDT', 'US/Pacific', 'US/Pacific-New']

Note: timezone draws from locally-installed timezone data. You can also add the 1st party tzdata library (not in standard lib, but maintained by python's core devs: use pip install tzdata).

Related