datetimex.py 759 B

1234567891011121314151617181920212223242526
  1. from datetime import datetime, timezone
  2. from dateutil import parser
  3. def parse_iso8601_to_utc(dt_str: str) -> datetime:
  4. """
  5. Parse an ISO8601 datetime string (with optional timezone) into a datetime
  6. object in UTC timezone.
  7. Handles nanoseconds by truncating to microseconds.
  8. Args:
  9. - dt_str: The ISO8601 datetime string to parse.
  10. Example:
  11. - UTC with Z: '2025-11-11T04:08:35.882997794Z'
  12. - With timezone offset: '2025-11-11T12:08:35.882997+08:00'
  13. - Without timezone (assumed UTC): '2025-11-11T04:08:35.882997'
  14. """
  15. dt = parser.isoparse(dt_str)
  16. if dt.tzinfo is None:
  17. dt = dt.replace(tzinfo=timezone.utc)
  18. else:
  19. dt = dt.astimezone(timezone.utc)
  20. return dt