spdx_tools.spdx.datetime_conversions

 1# SPDX-FileCopyrightText: 2022 spdx contributors
 2#
 3# SPDX-License-Identifier: Apache-2.0
 4from datetime import datetime, timezone
 5
 6
 7def datetime_from_str(date_str: str) -> datetime:
 8    if not isinstance(date_str, str):
 9        raise TypeError(f"Could not convert str to datetime, invalid type: {type(date_str).__name__}")
10
11    date = datetime.strptime(date_str, "%Y-%m-%dT%H:%M:%SZ")  # raises ValueError if format does not match
12    return date
13
14
15def datetime_to_iso_string(date: datetime) -> str:
16    """
17    Return an ISO-8601 representation of a datetime object.
18    """
19    if date.tzinfo is not None:
20        date = date.astimezone(timezone.utc)  # Convert aware datetimes to UTC
21        date = date.replace(tzinfo=None)  # Convert to naive datetime
22
23    if date.microsecond != 0:
24        date = date.replace(microsecond=0)  # SPDX does not support microseconds
25
26    return date.isoformat() + "Z"
def datetime_from_str(date_str: str) -> datetime.datetime:
 8def datetime_from_str(date_str: str) -> datetime:
 9    if not isinstance(date_str, str):
10        raise TypeError(f"Could not convert str to datetime, invalid type: {type(date_str).__name__}")
11
12    date = datetime.strptime(date_str, "%Y-%m-%dT%H:%M:%SZ")  # raises ValueError if format does not match
13    return date
def datetime_to_iso_string(date: datetime.datetime) -> str:
16def datetime_to_iso_string(date: datetime) -> str:
17    """
18    Return an ISO-8601 representation of a datetime object.
19    """
20    if date.tzinfo is not None:
21        date = date.astimezone(timezone.utc)  # Convert aware datetimes to UTC
22        date = date.replace(tzinfo=None)  # Convert to naive datetime
23
24    if date.microsecond != 0:
25        date = date.replace(microsecond=0)  # SPDX does not support microseconds
26
27    return date.isoformat() + "Z"

Return an ISO-8601 representation of a datetime object.