Crate temps

Source
Expand description

§temps

A natural language time expression parser for Rust.

This crate provides a unified interface for parsing human-readable time expressions like “in 5 minutes”, “tomorrow at 3pm”, or “next Monday” into concrete datetime values. It supports multiple datetime backends through feature flags.

§Features

  • Natural language parsing: Parse expressions like “in 2 hours”, “yesterday”, “next Friday”
  • Multiple languages: Currently supports English and German
  • Backend flexibility: Choose between chrono and jiff datetime libraries
  • Type-safe: Strong typing for time units, directions, and expressions
  • Comprehensive error handling: Detailed error types for debugging

§Quick Start

Add to your Cargo.toml:

[dependencies]
temps = { version = "0.1", features = ["chrono"] }
# or
temps = { version = "0.1", features = ["jiff"] }

§Examples

§Using with chrono

use temps::chrono::{parse_to_datetime, Language};

let dt = parse_to_datetime("in 30 minutes", Language::English).unwrap();
println!("In 30 minutes: {}", dt);

let dt = parse_to_datetime("morgen um 15:30", Language::German).unwrap();
println!("Tomorrow at 15:30: {}", dt);

§Using with jiff

use temps::jiff::{parse_to_zoned, Language};

let dt = parse_to_zoned("next Monday at 9:00 am", Language::English).unwrap();
println!("Next Monday at 9:00 am: {}", dt);

§Lower-level API

use temps::chrono::{parse, Language, TimeExpression, ChronoProvider, TimeParser};

// Parse to an expression first
let expr = parse("in 2 hours", Language::English).unwrap();

// Then convert to datetime
let provider = ChronoProvider;
let dt = provider.parse_expression(expr).unwrap();

§Supported Expressions

§Relative Time

  • “in 5 minutes” / “in 5 Minuten”
  • “2 hours ago” / “vor 2 Stunden”
  • “in 3 days” / “in 3 Tagen”

§Day References

  • “today” / “heute”
  • “tomorrow” / “morgen”
  • “yesterday” / “gestern”
  • “next Monday” / “nächsten Montag”
  • “last Friday” / “letzten Freitag”

§Absolute Times

  • “3:30 pm” / “15:30”
  • “tomorrow at 10:00 am” / “morgen um 10:00”
  • “2024-12-25T15:30:00Z” (ISO format)

§Feature Flags

  • chrono: Enable chrono datetime backend
  • jiff: Enable jiff datetime backend

At least one backend must be enabled.