Source code for kappa_sdk.datetime_utils
from typing import Optional
from datetime import datetime, timezone
import dateutil.parser
[docs]
def datetime_to_utc(date: Optional[datetime]) -> Optional[datetime]:
    """ Converts a given date/time to UTC date/time.
    If a given date/time has time zone information, its value is converted.
    If there is no time zone information attached to it, then it is directly interpreted as UTC.
    Parameters
    ----------
    date:
        The date/time to convert.
    Returns
    -------
    :class:`datetime`:
        Date/time in UTC.
    """
    if date is None:
        return None
    if date.tzinfo is not None and date.tzinfo.utcoffset(date) is not None:
        date = date.astimezone(timezone.utc)
    return date.replace(tzinfo=timezone.utc) 
[docs]
def str_to_datetime(time_string: Optional[str]) -> Optional[datetime]:
    """ Converts a string to UTC date/time.
    Parameters
    ----------
    time_string:
        String representation of date/time.
    Returns
    -------
    :class:`datetime`:
        Date/time in UTC.
    """
    if not (time_string is not None and time_string.strip()):
        return None
    date = dateutil.parser.parse(time_string)
    return datetime_to_utc(date) 
[docs]
def datetime_to_str(date: Optional[datetime]) -> Optional[str]:
    """ Converts a date/time to string with UTC format.
    Parameters
    ----------
    date:
        String representation of date/time.
    Returns
    -------
    :class:`str`:
        A string representation of date/time in UTC.
    """
    if date is None:
        return None
    if date.tzinfo is None:
        date = date.replace(tzinfo=timezone.utc)
    else:
        date = date.astimezone(timezone.utc)
    return '{:04d}-{:02d}-{:02d}T{:02d}:{:02d}:{:02d}.{:06d}Z'.format(date.year, date.month, date.day, date.hour, date.minute, date.second, date.microsecond)