39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
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)
|
|
)
|