Skip to main content

A modern Python datetime library with fluent API and immutable design

Project description

Carbonic

A modern Python datetime library with fluent API, built with stdlib zoneinfo, dataclasses for immutability, and comprehensive localization support.

Carbonic provides an intuitive and fluent API for working with dates and times in Python, leveraging modern Python features for better type safety and performance.

Features

  • 🚀 Fluent and immutable API - Built with dataclasses for type safety
  • 🌍 Stdlib zoneinfo - Uses Python's built-in timezone support (no external dependencies)
  • 🔒 Immutable by design - All operations return new instances
  • 🌐 Full i18n support - English, Polish, and extensible locale system
  • High performance - Minimal overhead with stdlib components
  • 🔧 Comprehensive formatting - Extensive date/time formatting options
  • 📝 Human-readable differences - Localized relative time descriptions
  • 🎯 Type-safe - Full type hints throughout

Installation

# Basic installation
pip install carbonic

# With performance optimizations (recommended)
pip install carbonic[performance]

Performance

Carbonic is designed for high performance with several optimizations:

  • Fast ISO parsing: Optional ciso8601 integration for ~10x faster ISO 8601 datetime parsing
  • Memory efficiency: All classes use __slots__ for minimal memory overhead
  • Lazy evaluation: Expensive formatting operations (locale lookups, timezone formatting) are cached
  • Stdlib only: Core functionality requires no external dependencies

Performance benchmark results:

  • ISO parsing: 0.001ms per operation (with ciso8601)
  • Formatting: 0.004ms per operation (with caching)
  • Memory: 100% slot usage, no __dict__ overhead

Quick Start

from carbonic import DateTime, Duration

# Create and manipulate dates
now = DateTime.now()
tomorrow = now.add(days=1)
next_week = now.add(days=7)

# Parse ISO strings (fast with ciso8601)
dt = DateTime.parse("2024-12-25T15:30:00Z")

# Format with Carbon-style tokens
formatted = dt.format("F j, Y g:i A")  # "December 25, 2024 3:30 PM"

# Localized formatting
polish = dt.format("F j, Y", locale="pl")  # "grudzień 25, 2024"

# Duration calculations
duration = DateTime.now() - DateTime(2024, 1, 1)
print(duration.humanize())  # "11 months 3 weeks 2 days"

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

carbonic-1.0.2.tar.gz (73.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

carbonic-1.0.2-py3-none-any.whl (47.4 kB view details)

Uploaded Python 3

File details

Details for the file carbonic-1.0.2.tar.gz.

File metadata

  • Download URL: carbonic-1.0.2.tar.gz
  • Upload date:
  • Size: 73.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.19

File hashes

Hashes for carbonic-1.0.2.tar.gz
Algorithm Hash digest
SHA256 f16ac101dc38f4e1c132771d4e6fb90ff1f5d82c8f4beef3e9543d1f9d5037b2
MD5 70ee44a504da4be9d14e416acf80dca9
BLAKE2b-256 92d2ffb54ec0e2d1e3d541fa00212734a3c6503b5de7f807e2324656b4609f6c

See more details on using hashes here.

File details

Details for the file carbonic-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: carbonic-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 47.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.19

File hashes

Hashes for carbonic-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 99d22fd6aa853a082a8b56a29e628ec5eaa459c58a3bc2e017982f19da6f3fb0
MD5 1b6e5edb476923fdf1a39f1201ff929d
BLAKE2b-256 4ba941e77b5de1581219c8466c914fe06e0b5779e2ae9b27b12735f9f0ec5192

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page