44 lines
1.0 KiB
Python
44 lines
1.0 KiB
Python
try:
|
|
import pytz
|
|
except ModuleNotFoundError:
|
|
pytz = None
|
|
import zoneinfo
|
|
|
|
|
|
def _get_tzinfo(tzenv: str):
|
|
"""Get the tzinfo from `zoneinfo` or `pytz`
|
|
|
|
:param tzenv: timezone in the form of Continent/City
|
|
:return: tzinfo object or None if not found
|
|
"""
|
|
if pytz:
|
|
try:
|
|
return pytz.timezone(tzenv)
|
|
except pytz.UnknownTimeZoneError:
|
|
pass
|
|
else:
|
|
try:
|
|
return zoneinfo.ZoneInfo(tzenv)
|
|
except zoneinfo.ZoneInfoNotFoundError:
|
|
pass
|
|
|
|
return None
|
|
|
|
|
|
def _get_tzinfo_or_raise(tzenv: str):
|
|
tzinfo = _get_tzinfo(tzenv)
|
|
if tzinfo is None:
|
|
raise LookupError(
|
|
f"Can not find timezone {tzenv}. \n"
|
|
"Timezone names are generally in the form `Continent/City`.",
|
|
)
|
|
return tzinfo
|
|
|
|
|
|
def _get_tzinfo_from_file(tzfilename: str):
|
|
with open(tzfilename, 'rb') as tzfile:
|
|
if pytz:
|
|
return pytz.tzfile.build_tzinfo('local', tzfile)
|
|
else:
|
|
return zoneinfo.ZoneInfo.from_file(tzfile)
|