31 lines
850 B
Python
31 lines
850 B
Python
from datetime import datetime, timezone
|
|
|
|
|
|
def utc_now() -> datetime:
|
|
"""Naive UTC datetime for existing SQLAlchemy DateTime columns."""
|
|
return datetime.now(timezone.utc).replace(tzinfo=None)
|
|
|
|
|
|
def to_utc_naive(value: datetime | None) -> datetime | None:
|
|
if value is None:
|
|
return None
|
|
if value.tzinfo is None:
|
|
return value
|
|
return value.astimezone(timezone.utc).replace(tzinfo=None)
|
|
|
|
|
|
def to_utc_aware(value: datetime | None) -> datetime | None:
|
|
if value is None:
|
|
return None
|
|
if value.tzinfo is None:
|
|
return value.replace(tzinfo=timezone.utc)
|
|
return value.astimezone(timezone.utc)
|
|
|
|
|
|
def to_zulu_iso(value: datetime) -> str:
|
|
return to_utc_aware(value).isoformat().replace("+00:00", "Z")
|
|
|
|
|
|
def unix_ms_utc(value: datetime) -> int:
|
|
return int(to_utc_aware(value).timestamp() * 1000)
|