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)