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)