You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.0 KiB
Python
47 lines
1.0 KiB
Python
"""
|
|
Timezone utilities
|
|
|
|
Just UTC-awareness right now
|
|
"""
|
|
|
|
# Copyright (c) Jupyter Development Team.
|
|
# Distributed under the terms of the Modified BSD License.
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime, timedelta, timezone, tzinfo
|
|
|
|
# constant for zero offset
|
|
ZERO = timedelta(0)
|
|
|
|
|
|
class tzUTC(tzinfo): # noqa: N801
|
|
"""tzinfo object for UTC (zero offset)"""
|
|
|
|
def utcoffset(self, d: datetime | None) -> timedelta:
|
|
"""Compute utcoffset."""
|
|
return ZERO
|
|
|
|
def dst(self, d: datetime | None) -> timedelta:
|
|
"""Compute dst."""
|
|
return ZERO
|
|
|
|
|
|
def utcnow() -> datetime:
|
|
"""Return timezone-aware UTC timestamp"""
|
|
return datetime.now(timezone.utc)
|
|
|
|
|
|
def utcfromtimestamp(timestamp: float) -> datetime:
|
|
return datetime.fromtimestamp(timestamp, timezone.utc)
|
|
|
|
|
|
UTC = tzUTC() # type:ignore[abstract]
|
|
|
|
|
|
def isoformat(dt: datetime) -> str:
|
|
"""Return iso-formatted timestamp
|
|
|
|
Like .isoformat(), but uses Z for UTC instead of +00:00
|
|
"""
|
|
return dt.isoformat().replace("+00:00", "Z")
|