summaryrefslogtreecommitdiff
path: root/babel/localtime/_helpers.py
diff options
context:
space:
mode:
Diffstat (limited to 'babel/localtime/_helpers.py')
-rw-r--r--babel/localtime/_helpers.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/babel/localtime/_helpers.py b/babel/localtime/_helpers.py
new file mode 100644
index 0000000..b7238f6
--- /dev/null
+++ b/babel/localtime/_helpers.py
@@ -0,0 +1,42 @@
+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)