diff options
Diffstat (limited to 'babel/localtime/_helpers.py')
-rw-r--r-- | babel/localtime/_helpers.py | 42 |
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) |