"""Timezone utils.""" from datetime import datetime import pytz from src.constants import common_consts from src.constants import timezones def convert_to_utc_datetime(local_date, timezone_name=timezones.US_EASTERN): """Convert local datetime without timezone to UTC. Args: local_date (datetime): local time with empty timezone timezone_name (str): local timezone name Returns: datetime: UTC datetime with empty timezone """ tz = pytz.timezone(timezone_name) local_date = tz.localize(local_date) return local_date.astimezone(pytz.utc).replace(tzinfo=None) def convert_to_utc_str(local_date, timezone_name=timezones.US_EASTERN): """Convert local datetime without timezone to UTC. Args: local_date (str or datetime): local time with empty timezone timezone_name (str): local timezone name Returns: str or None: UTC datetime with empty timezone as str or None if local_date is None. Raises: ValueError: unknown input date format. """ if local_date is None: return None if isinstance(local_date, str): # Convert to datetime only if it is a string. for datetime_format in common_consts.INPUT_DATETIME_FORMATS: try: local_date = datetime.strptime(local_date, datetime_format) break except ValueError: pass else: raise ValueError(f'local_date "{local_date}" format is not known.') utc_date = convert_to_utc_datetime(local_date, timezone_name) return utc_date.strftime(common_consts.OUTPUT_DATETIME_FORMAT)