annoworkapi.utils のソースコード
import datetime
[ドキュメント]
def str_to_datetime(str_datetime: str) -> datetime.datetime:
"""
WebAPIがサポートしているISO8601の文字列をdatetime objectに変換します。
datetime objectはawareです。
Args:
str_datetime (str): ISO8601の文字列(例: ``2021-04-01T01:23:45.678Z`` )
Returns:
datetime object
"""
# 末尾がZだと、datetime.fromisoformatが利用できないので、strptimeでパースする
return datetime.datetime.strptime(str_datetime, "%Y-%m-%dT%H:%M:%S.%fZ").replace(tzinfo=datetime.timezone.utc)
[ドキュメント]
def datetime_to_str(dt: datetime.datetime) -> str:
"""
datetime objectをWebAPIがサポートしているISO8601の文字列に変換します。
datetime objectがnativeの場合、UTCとみなします。
Args:
datetime: ISO8601の文字列(例: ``2021-04-01T01:23:45.678Z`` )
Returns:
ISO8601の文字列(例: ``2021-04-01T01:23:45.678Z`` )
Raises:
ValueError: datetimeオブジェクトがnativeなオブジェクト(タイムゾーン情報が含まれていない)のとき
"""
# strftimeメソッドを利用すると、マイクロ秒まで出力されるので、一旦`isoformat`メソッドでミリ秒まで出力してから、timezoneを"Z"に置換する
if dt.tzinfo is None:
raise ValueError("datetimeオブジェクトにはタイムゾーン情報が含まれていません。")
return dt.astimezone(datetime.timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z")