simple-datetime-rs 0.3.0

A high-performance, lightweight date and time library for Rust with dramatically faster parsing, memory-efficient operations, and chrono-compatible formatting
Documentation
use simple_datetime_rs::{Date, DateTime, Time};
use std::time::Instant;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("Performance Demo - simple-datetime-rs");
    println!("=====================================");

    let start = Instant::now();
    for _ in 0..100_000 {
        let _: Date = "2023-06-15".parse()?;
    }
    let duration = start.elapsed();
    println!(
        "100,000 date parses: {:?} ({:.2}ns per parse)",
        duration,
        duration.as_nanos() as f64 / 100_000.0
    );

    let start = Instant::now();
    for _ in 0..100_000 {
        let _: Time = "14:30:45.123456".parse()?;
    }
    let duration = start.elapsed();
    println!(
        "100,000 time parses: {:?} ({:.2}ns per parse)",
        duration,
        duration.as_nanos() as f64 / 100_000.0
    );

    let start = Instant::now();
    for _ in 0..100_000 {
        let _: DateTime = "2023-06-15T14:30:45Z".parse()?;
    }
    let duration = start.elapsed();
    println!(
        "100,000 datetime parses: {:?} ({:.2}ns per parse)",
        duration,
        duration.as_nanos() as f64 / 100_000.0
    );

    let date = Date::new(2023, 6, 15);
    let start = Instant::now();
    for _ in 0..1_000_000 {
        let _ = date.add_days(30);
    }
    let duration = start.elapsed();
    println!(
        "1,000,000 add_days operations: {:?} ({:.2}ns per operation)",
        duration,
        duration.as_nanos() as f64 / 1_000_000.0
    );

    let start = Instant::now();
    let mut dates = Vec::with_capacity(1000);
    for i in 0..1000 {
        dates.push(Date::new(2023, 6, 15 + i % 30));
    }
    let duration = start.elapsed();
    println!(
        "Created 1,000 Date objects: {:?} ({:.2}ns per object)",
        duration,
        duration.as_nanos() as f64 / 1000.0
    );

    println!(
        "\nMemory usage: {} bytes for 1,000 Date objects",
        std::mem::size_of::<Date>() * 1000
    );

    Ok(())
}