Skip to main content

to-utc

Timezones are error-prone. The safest approach is to store and process datetimes in UTC consistently.

  • to_utc: converts any datetime-like value to a UTC-aware datetime.datetime object
  • to_naive_utc: converts any datetime-like value to a naive datetime.datetime object (assumes UTC)
  • now: returns the current UTC time as a UTC-aware datetime.datetime object
  • to_timedelta: converts any timedelta-like value to datetime.timedelta
def to_utc(value: Union[
    datetime,
    str,
    int,
    float,
    date,
    "pendulum.DateTime", # if pendulum installed
    "pd.Timestamp",      # if pandas installed
    "np.datetime64",     # if numpy installed
    "arrow.Arrow",       # if arrow installed
]) -> datetime:
    """
    Converts any datetime-like value to a UTC-aware datetime.

      - Numbers are handled as timestamps (try seconds → milliseconds → microseconds)
      - Strings are converted as follows:
        1. Try fixed patterns first:
          - %Y-%m-%d
          - %Y-%m-%d %H:%M:%S
          - %Y-%m-%dT%H:%M:%S
          - %Y-%m-%dT%H:%M:%SZ
          - %Y-%m-%d %H:%M:%S.%f
          - %Y-%m-%dT%H:%M:%S.%fZ
          - %Y%m%d
          - %Y%m%d%H%M%S
          - %Y-%m-%d %H:%M:%S%z
          - %Y-%m-%dT%H:%M:%S%z
        2. Fallback to dateutil.parser.parse
      - Common datetime-like objects are converted as expected (datetime, date, pd.Timestamp, ...)
      - Naive datetimes are assumed to be UTC
      - Aware datetimes are converted to UTC
    """
    pass

def to_naive_utc(value: DatetimeLike) -> datetime:
    """
    Converts any datetime-like value to a naive UTC datetime.

    This is a convenience wrapper around to_utc() that strips timezone information.
    """
    pass

def now() -> datetime:
    """
    Returns the current UTC time as a UTC-aware datetime.
    """
    pass

...

def to_timedelta(value: Union[
    list,
    int,
    float,
    str,
    timedelta,
    "pd.Timedelta",   # if pandas installed
    "np.timedelta64", # if numpy installed
    "pendulum.Duration", # if pendulum installed
]) -> timedelta:
    """
    - Numbers: interpreted as seconds.
    - Strings are converted as follows:
      1. Parse compact format (\d+d\d+h\d+m\d+s, e.g. "3d5h12m40s")  
      2. Parse word form ("2 hours 5 minutes", e.g. "1 day 3 hours")
    - Common timedelta-like objects converted appropriately (timedelta, pd.Timedelta, ...)
    """
    pass

...

from to_utc import to_utc, to_naive_utc, now, to_timedelta

# Convert to UTC-aware datetime
to_utc("2024-01-01T15:00:00+03:00")  # -> datetime(2024, 1, 1, 12, 0, 0, tzinfo=timezone.utc)
to_utc(1754942420)  # -> datetime(2025, 08, 11, 20, 0, 20, tzinfo=timezone.utc)

# Convert to naive UTC datetime
to_naive_utc("2024-01-01T15:00:00+03:00")  # -> datetime(2024, 1, 1, 12, 0, 0)
to_naive_utc(1754942420)  # -> datetime(2025, 08, 11, 20, 0, 20)

# Get current UTC time
now()  # -> datetime(2025, 11, 10, 14, 30, 45, 123456, tzinfo=timezone.utc)

# Convert to timedelta
to_timedelta(120)    # -> timedelta(minutes=2)
to_timedelta("1h30m15s")    # -> timedelta(hours=1, minutes=30, seconds=15)

Metadata

Release files for to-utc 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for to-utc 0.3.0
File Size Uploaded
to_utc-0.3.0.tar.gz 93.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for to-utc 0.3.0
File Interpreter ABI Platform
to_utc-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 101.1 kB

Release files / to_utc-0.3.0.tar.gz

Download URL to_utc-0.3.0.tar.gz
Size 93.0 kB
Tags Source
SHA-256 checksum
How to use checksums
d0a9d77c0d5b5bdb4b102ad49715cbd9a6fe271535f4d1f2913775e14f59a8bc
BLAKE2b-256 checksum
How to use checksums
3831204b1118f2e10228e9ecd1625cb8dfcc20252664624c7ce1b41a11b93a26
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.2

Release files / to_utc-0.3.0-py3-none-any.whl

Download URL to_utc-0.3.0-py3-none-any.whl
Size 8.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8fd3f21e2e27593049d6486d3b1481a1563d8f4e65100b5d0f9ef5dbb9e472be
BLAKE2b-256 checksum
How to use checksums
29b207002a5b83b4ee42ed50aa595a7335beb9a2cd9d8092afd07d0ab4fc0fa5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.2

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page