Skip to main content

ALT-time-utils

A collection of time-related utility functions for Python applications.

License: MIT Python 3.8+ Code style: black

Features

  • 🌍 UTC-first design: All timestamps are UTC by default with timezone awareness
  • 🔄 Timezone conversions: Easy conversion between UTC and local time
  • 📅 Multiple formats: ISO 8601, file-friendly timestamps, and human-readable durations
  • 🏷️ Type hints: Full type annotations for better IDE support
  • ✅ Well tested: 100% test coverage
  • 🚀 Zero dependencies: Uses only Python standard library

Installation

pip install ALT-time-utils

Quick Start

from alt_time_utils import (
    get_utc_timestamp,
    get_utc_timestamp_string,
    format_duration,
    local_to_utc,
    utc_to_local
)

# Get current UTC time
utc_now = get_utc_timestamp()
print(utc_now)  # 2025-01-15 12:30:45.123456+00:00

# Get UTC timestamp as string with 'Z' suffix
utc_string = get_utc_timestamp_string()
print(utc_string)  # 2025-01-15T12:30:45.123456Z

# Convert local time to UTC
from datetime import datetime
local_time = datetime.now()
utc_time = local_to_utc(local_time)

# Format duration in human-readable format
duration = format_duration(3665.5)
print(duration)  # 1h 1m 5.5s

API Reference

Timestamp Functions

get_utc_timestamp() -> datetime

Get the current UTC timestamp with timezone info.

>>> utc_time = get_utc_timestamp()
>>> print(utc_time.tzinfo)
datetime.timezone.utc

get_utc_timestamp_string() -> str

Get the current UTC timestamp as an ISO format string with 'Z' suffix.

>>> timestamp = get_utc_timestamp_string()
>>> print(timestamp)
'2025-01-15T12:30:45.123456Z'

get_local_timestamp() -> datetime

Get the current timestamp in the local timezone.

>>> local_time = get_local_timestamp()
>>> print(local_time.tzinfo)
<DstTzInfo 'America/New_York' EST-1 day, 19:00:00 STD>

Timezone Conversion

local_to_utc(local_dt: datetime) -> datetime

Convert a local datetime to UTC. Handles both naive and timezone-aware datetimes.

>>> from datetime import datetime
>>> local = datetime.now()  # Naive datetime
>>> utc = local_to_utc(local)
>>> print(utc.tzinfo)
datetime.timezone.utc

utc_to_local(utc_dt: datetime) -> datetime

Convert a UTC datetime to local timezone.

>>> from datetime import datetime, timezone
>>> utc = datetime.now(timezone.utc)
>>> local = utc_to_local(utc)
>>> print(local.tzinfo)
<DstTzInfo 'America/New_York' EST-1 day, 19:00:00 STD>

Formatting Functions

get_file_timestamp() -> str

Get timestamp formatted for filenames (YYYYMMDD_HHMMSS).

>>> timestamp = get_file_timestamp()
>>> print(timestamp)
'20250115_123045'

get_date_string() -> str

Get the current date as a string (YYYYMMDD).

>>> date_str = get_date_string()
>>> print(date_str)
'20250115'

get_time_string() -> str

Get the current time as a string (HHMMSS).

>>> time_str = get_time_string()
>>> print(time_str)
'123045'

format_duration(seconds: float) -> str

Format a duration in seconds to a human-readable string.

>>> format_duration(0.123)
'123ms'
>>> format_duration(45.6)
'45.6s'
>>> format_duration(3665.5)
'1h 1m 5.5s'
>>> format_duration(-5)
'0s'

Utility Functions

get_local_timezone_name() -> str

Get the name of the local timezone.

>>> tz_name = get_local_timezone_name()
>>> print(tz_name)
'EST'

get_local_utc_offset() -> str

Get the local timezone's UTC offset as a string.

>>> offset = get_local_utc_offset()
>>> print(offset)
'-05:00'

format_utc_timestamp(dt: datetime) -> str

Format any datetime as UTC ISO string with 'Z' suffix.

>>> from datetime import datetime
>>> dt = datetime.now()
>>> formatted = format_utc_timestamp(dt)
>>> print(formatted)
'2025-01-15T12:30:45.123456Z'

Examples

Working with Log Files

from alt_time_utils import get_file_timestamp, get_date_string
import os

# Create timestamped log file
timestamp = get_file_timestamp()
log_file = f"app_{timestamp}.log"

# Organize logs by date
date_dir = get_date_string()
os.makedirs(f"logs/{date_dir}", exist_ok=True)

Duration Tracking

from alt_time_utils import get_utc_timestamp, format_duration

start_time = get_utc_timestamp()

# ... do some work ...

end_time = get_utc_timestamp()
duration = (end_time - start_time).total_seconds()
print(f"Operation took: {format_duration(duration)}")

Timezone-Aware Operations

from alt_time_utils import local_to_utc, utc_to_local, get_local_utc_offset
from datetime import datetime

# Schedule something in local time, store in UTC
local_scheduled = datetime(2025, 1, 20, 9, 0, 0)  # 9 AM local
utc_scheduled = local_to_utc(local_scheduled)

# Display in user's timezone
user_local = utc_to_local(utc_scheduled)
offset = get_local_utc_offset()
print(f"Meeting at {user_local.strftime('%I:%M %p')} ({offset})")

Development

Setup

# Clone the repository
git clone https://github.com/Avilir/time_utils.git
cd time_utils

# Set up development environment
./scripts/setup_dev.sh

# Or using make
make setup

Running Tests

# Using make
make test

# Using script
./scripts/run_tests.sh

# Or directly with pytest
python -m pytest

Code Quality

# Run all checks
make all

# Individual checks
make lint        # Run linting
make type-check  # Run type checking
make format      # Format code

Building

# Build distributions
make build

# Or using script
./scripts/build.sh

Contributing

Contributions are welcome! Please follow these guidelines:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes with tests
  4. Run make all to ensure quality
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Author

Avi Layani - alayani@redhat.com

Acknowledgments

  • Inspired by the need for consistent time handling across Python projects

Metadata

Release files for ALT-time-utils 0.1.1

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

Source distribution (sdist)

Source distribution for ALT-time-utils 0.1.1
File Size Uploaded
alt_time_utils-0.1.1.tar.gz 10.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ALT-time-utils 0.1.1
File Interpreter ABI Platform
alt_time_utils-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 18.3 kB

Release files / alt_time_utils-0.1.1.tar.gz

Download URL alt_time_utils-0.1.1.tar.gz
Size 10.0 kB
Tags Source
SHA-256 checksum
How to use checksums
92cb6f230afa3479421bb015a97f2e4cbdf69327c8c8bc83943d9b6d51c65e28
BLAKE2b-256 checksum
How to use checksums
429e1164b747ec4377895a27d7546ea76a58c846f72e9c225a119e847c29744f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release files / alt_time_utils-0.1.1-py3-none-any.whl

Download URL alt_time_utils-0.1.1-py3-none-any.whl
Size 8.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d08bd69d00bcd65cb37232db1784ca91c163c36817311a0e10fb8126c88646e0
BLAKE2b-256 checksum
How to use checksums
cb1aead5745472bfd7ac6ad4e4a7288f4b6f1c1f67bfa28c20c754118680677d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

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