Arbeiten mit Daten in Rust: Überblick über Bibliotheken zur Zeitverarbeitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit Daten in Rust: Überblick über die wichtigsten Bibliotheken



Das Rust-Ökosystem bietet mehrere leistungsstarke Bibliotheken für die Arbeit mit Datum und Zeit. Im Gegensatz zu Python mit seinem integrierten Modul datetime bietet die Rust-Standardbibliothek nur minimale Funktionalität (std::time::Instant und Duration), sodass für ernsthafte Aufgaben auf externe Crates zurückgegriffen werden muss. In diesem Artikel betrachten wir drei Hauptbibliotheken: Chrono, Time und Jiff.



1. Chrono — der De-facto-Standard



Chrono ist die beliebteste Bibliothek (über 100 Millionen Downloads). Sie bietet eine vollständige Palette von Werkzeugen für die Arbeit mit Datum, Zeit, Zeitzonen und Formatierung.



Hauptfunktionen:

  • NaiveDate, NaiveDateTime — Datum und Uhrzeit ohne Zeitzone
  • DateTime<Tz> — Datum/Uhrzeit mit Zeitzonenbindung
  • Unterstützung von Duration und arithmetischen Operationen
  • Formatierung über format! und Zeichenketten-Parsing
  • Arbeit mit Kalendern (Gregorianisch, ISO)


Codebeispiel:

use chrono::{DateTime, Utc, NaiveDate, Duration};

fn main() { // Aktuelle Zeit in UTC let now: DateTime<Utc> = Utc::now(); println!("Aktuelle Zeit: {}", now.format("%Y-%m-%d %H:%M:%S"));

// Erstellen eines bestimmten Datums let date = NaiveDate::from_ymd_opt(2025, 3, 15).unwrap(); println!("Datum: {}", date);

// Arithmetik mit Daten let future = now + Duration::days(30); println!("In 30 Tagen: {}", future.format("%d.%m.%Y"));

// Parsen einer Zeichenkette let parsed = "2025-01-01 12:00:00" .parse::<DateTime<Utc>>() .expect("Ungültiges Datumsformat"); println!("Geparst: {}", parsed);}


Chrono eignet sich hervorragend für die meisten Projekte, kann aber überdimensioniert sein, wenn nur grundlegende Funktionalität benötigt wird.



2. Time — eine moderne Alternative



Der Crate Time (Entwickler Jacob Pratt) positioniert sich als sicherere und ergonomischere Alternative zu Chrono. Er verwendet strenge Typisierung und vermeidet Laufzeit-Panics.



Wesentliche Unterschiede:

  • Alle Operationen geben Result zurück — keine versteckten Panics
  • Strengeres Typsystem: separate Typen für Daten, Zeiten, Versätze
  • Integrierte Unterstützung für ISO 8601 und RFC 3339
  • Geringere Größe und schnellere Kompilierung


Codebeispiel:

use time::{Date, Month, OffsetDateTime, Duration, format_description};

fn main() -> Result<(), time::Error> { // Aktuelle Zeit let now = OffsetDateTime::now_utc(); println!("Jetzt: {}", now);

// Datumserstellung (ohne Panic) let date = Date::from_calendar_date(2025, Month::March, 15)?; println!("Datum: {}", date);

// Arithmetik let week_later = now + Duration::weeks(1); println!("In einer Woche: {}", week_later);

// Parsen mit explizitem Format let format = format_description::parse("[year]-[month]-[day]")?; let parsed = Date::parse("2025-12-31", &format)?; println!("Parsing: {}", parsed); Ok(())}


Time ist eine ausgezeichnete Wahl für neue Projekte, bei denen Sicherheit und Vorhersagbarkeit wichtig sind.



3. Jiff — der neueste Akteur



Jiff (von BurntSushi, dem Schöpfer von regex und ripgrep) ist die aktuellste Bibliothek (Veröffentlichung 2024). Sie konzentriert sich auf die Arbeit mit Zeitzonen und Internationalisierung.



Besonderheiten:

  • Integrierte Zeitzonendatenbank (IANA)
  • Unterstützung nicht-standardmäßiger Kalender (Islamisch, Jüdisch u. a.)
  • Fortschrittliche Arbeit mit Intervallen und Perioden
  • Hohe Leistung durch faule Berechnungen


Codebeispiel:

Empfehlungen