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 ZeitzoneDateTime<Tz>— Datum/Uhrzeit mit Zeitzonenbindung- Unterstützung von
Durationund 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
Resultzurü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:
Auch in der Bibliothek
Testen in C++: Überblick über Frameworks und Tools (Google Test, Catch2, doctest)
WebSocket in Java: Die Bibliothek Java-WebSocket für Echtzeitkommunikation
Logging in Rust: Überblick über die besten Bibliotheken und Werkzeuge
Generierung von PDF-Berichten in Kotlin: Die Bibliothek iText 7
Contacts Swift: Komplette Anleitung mit Beispielen
Empfehlungen
Auch in der Bibliothek
Testen in C++: Überblick über Frameworks und Tools (Google Test, Catch2, doctest)
Logging in Rust: Überblick über die besten Bibliotheken und Werkzeuge
Contacts Swift: Komplette Anleitung mit Beispielen