from datetime import datetime from typing import Union from pytz import UTC from pytz import timezone as pytz_timezone def to_utc(date: datetime, timezone: Union[str, None] = None) -> datetime: """Move timezone unaware datetime object to UTC timezone and return it. ### Args: * date (`datetime`): Datetime to be converted. * timezone (`Union[str, None] = None`): Timezone name (must be pytz-compatible). Defaults to `None` (UTC). ### Returns: * `datetime`: Timezone unaware datetime in UTC with timezone's offset applied to it. """ timezone = "UTC" if timezone is None else timezone return pytz_timezone(timezone).localize(date).astimezone(UTC).replace(tzinfo=None) def from_utc(date: datetime, timezone: Union[str, None] = None) -> datetime: """Move timezone unaware datetime object to the timezone specified and return it. ### Args: * date (`datetime`): Datetime to be converted. * timezone (`Union[str, None] = None`): Timezone name (must be pytz-compatible). Defaults to `None` (UTC). ### Returns: * `datetime`: Timezone unaware datetime in timezone provided with offset from UTC applied to it. """ timezone = "UTC" if timezone is None else timezone return ( pytz_timezone("UTC") .localize(date) .astimezone(pytz_timezone(timezone)) .replace(tzinfo=None) )