Tiny helper for IANA time zones and abbreviations.
This package provides a small utility class backed by a static mapping in timezone.json to:
- List available IANA time zone names
- Look up the time zone abbreviation (e.g., SGT, EDT) for a given zone
Notes:
- Abbreviations are static values from
timezone.jsonand are not date-aware (no DST transitions). - On Windows,
tzdatais listed as a dependency in case you choose to extend functionality using IANA tzdata; the current implementation only readstimezone.jsonand does not require system tzdata at runtime.
Install the latest published version from PyPI:
pip install tznnUpgrade to the newest version:
pip install -U tznnNote: On Windows, tzdata will be installed automatically as a dependency when needed.
From the project root:
pip install .For development (tests, etc.):
pip install -r requirements.txtfrom tznn import tznn
tz = tznn()
# 1) Get a sorted list of available IANA time zone names
zones = tz.get_available_time_zones()
print(len(zones), zones[:5])
# 2) Get the abbreviation for a known time zone
print(tz.get_abbr("Asia/Singapore")) # -> "SGT"
print(tz.get_abbr("America/New_York")) # -> e.g., "EDT" per timezone.json
# 3) Get the full mapping of zone -> abbreviation
mapping = tz.get_all_available_time_zones()
print(mapping["America/New_York"]) # -> "EDT"Default Python libraries do not provide a simple way to get static time zone abbreviations from IANA zone names. This package fills that gap with a lightweight solution. Example :
from datetime import datetime
from zoneinfo import ZoneInfo
dt_utc = datetime(2025, 9, 23, 3, 2, 7)
dt_vn = dt_utc.astimezone(ZoneInfo("Asia/Ho_Chi_Minh"))
print(dt_vn.strftime("%d/%m/%Y %H:%M:%S %Z %z")) # → 23/09/2025 10:02:07 ICT +0700The result is 23/09/2025 02:02:07 +07 +0700 but expectation should be 23/09/2025 10:02:07 ICT +0700
Class: tznn
-
get_available_time_zones() -> list[str]- Returns a sorted list of all IANA zone names present in
timezone.json.
- Returns a sorted list of all IANA zone names present in
-
get_all_available_time_zones() -> dict[str, str]- Returns the entire mapping of
zone_name -> abbreviationloaded fromtimezone.json.
- Returns the entire mapping of
-
get_abbr(tz_name: str) -> str- Returns the abbreviation for the given IANA time zone name.
- Raises
ValueErrorif the zone name is not found in the mapping.
- Data is loaded from the local
timezone.jsonfile included in the repository. - Abbreviations are static and may not reflect historical or future DST changes. If you need date-aware abbreviations,
consider using Python's
zoneinfomodule (Python 3.9+) together with an appropriate tz database.
Run the test suite from the project root:
pytest -qThe tests validate:
- The list of available zones is sorted and non-empty.
- The mapping includes known zones and string abbreviations.
get_abbrreturns correct abbreviations and raises on invalid zones.
- Optional date-aware abbreviation lookup using
zoneinfo(orpytzfor older Pythons). - Utilities for DST-aware conversions and current time by zone.
- https://adamj.eu/tech/2021/05/06/how-to-list-all-timezones-in-python/
- https://stackoverflow.com/questions/78580391/zoneinfo-is-missing-timezone-names-that-pytz-has
- https://docs.python.org/3/library/zoneinfo.html
- python/tzdata#111
- https://discuss.python.org/t/get-local-time-zone/4169/10
- https://www.iana.org/time-zones
- https://data.iana.org/time-zones/releases/