Get local time zone name on Windows (Python 3.9 zoneinfo)
datetime, python, python-3.9, timezone, zoneinfo
Solution
You don't need to use zoneinfo to use the system local time zone. You can simply pass `None` (or omit) the time zone when calling `datetime.astimezone`.
From the docs:
If called without arguments (or with `tz=None`) the system local timezone is assumed. The `.tzinfo` attribute of the converted datetime instance will be set to an instance of timezone with the zone name and offset obtained from the OS.
Thus:
from datetime import datetime
naive = datetime(2020, 6, 11, 12)
aware = naive.astimezone()
Problem
Checking out the `zoneinfo` module in Python 3.9, I was wondering if it also offers a convenient option to retrieve the local time zone (OS setting) on Windows. On GNU/Linux, you can do ``` from datetime import datetime from zoneinfo import ZoneInfo naive = datetime(2020, 6, 11, 12) aware = naive.replace(tzinfo=ZoneInfo('localtime')) ``` but on Windows, that throws ZoneInfoNotFoundError: 'No time zone found with key localtime' so would I still have to use a third-party library? e.g. ``` import time import dateutil tzloc = dateutil.tz.gettz(time.tzname[time.daylight]) aware = naive.replace(tzinfo=tzloc) ``` Since `time.tzname[time.daylight]` returns a localized name (German in my case, e.g. 'Mitteleuropäische Sommerzeit'), this doesn't work either: ``` aware = naive.replace(tzinfo=ZoneInfo(tzloc)) ``` Any thoughts? p.s. to try this on Python < 3.9, use `backports` (see also this answer): ``` pip install backports.zoneinfo pip install tzdata # needed on Windows ```