Arbeiten mit Daten in Rust: Bibliotheken für Zeit und Kalender
Rust ist eine moderne systemnahe Programmiersprache, die strenge Typisierung und Speichersicherheit bietet. Die Standardbibliothek von Rust stellt jedoch nur minimale Mittel für die Arbeit mit Datum und Uhrzeit zur Verfügung. Für die vollwertige Arbeit mit Kalendern, Zeitzonen, Formatierung und Berechnungen verwenden Entwickler externe Crates. In diesem Artikel werden wir drei Hauptbibliotheken im Detail betrachten: chrono, time und jiff, sowie praktische Beispiele anführen.
1. Die Bibliothek chrono – der De-facto-Standard
chrono ist die beliebteste Bibliothek für die Arbeit mit Daten in Rust. Sie bietet eine umfangreiche API zum Erstellen, Manipulieren und Formatieren von Datum und Uhrzeit. Die wichtigsten Typen sind: NaiveDate, NaiveDateTime, DateTime (mit Zeitzonenberücksichtigung) und Duration.
Installation
# Cargo.toml[dependencies]chrono = "0.4"Beispiel: Aktuelles Datum und Uhrzeit
use chrono::{Local, Utc};
fn main() { let now_utc = Utc::now(); let now_local = Local::now(); println!("UTC: {}", now_utc); println!("Lokal: {}", now_local);}Beispiel: Parsen eines Strings und Formatierung
use chrono::NaiveDate;
fn main() { let date = NaiveDate::parse_from_str("2025-03-15", "%Y-%m-%d") .expect("Ungültiges Datumsformat"); println!("Tag: {}", date.format("%d.%m.%Y"));}Vorteile: riesige Community, Unterstützung für Zeitzonen über chrono-tz, Arbeit mit Intervallen und Dauern.
Nachteile: relativ große Größe, Komplexität bei der Arbeit mit nicht standardmäßigen Kalendern.
2. Die Bibliothek time – eine leichte Alternative
time ist eine modernere und leichtere Bibliothek, die sich aktiv weiterentwickelt. Sie verwendet ein strenges Typsystem, um Fehler zu vermeiden (z. B. Aufteilung in Date, Time, OffsetDateTime und PrimitiveDateTime).
Installation
[dependencies]time = "0.3"Beispiel: Erstellen eines Datums und Berechnung der Differenz
use time::{Date, Month, Duration};
fn main() { let start = Date::from_calendar_date(2025, Month::March, 10).unwrap(); let end = Date::from_calendar_date(2025, Month::March, 20).unwrap(); let diff = end - start; println!("Differenz: {} Tage", diff.whole_days());}Beispiel: Formatierung
use time::OffsetDateTime;use time::format_description::well_known::Rfc3339;
fn main() { let now = OffsetDateTime::now_utc(); let formatted = now.format(&Rfc3339).unwrap(); println!("RFC 3339: {}", formatted);}Vorteile: geringe Größe, klare Trennung der Typen, hervorragende Dokumentation.
Nachteile: weniger Beispiele im Internet als bei chrono.
3. Die Bibliothek jiff – für hochpräzise Intervalle
jiff ist eine spezialisierte Bibliothek für die Arbeit mit Kalenderintervallen und wiederkehrenden Ereignissen. Sie ist nützlich für Planungsaufgaben, Erinnerungen und die Berechnung von Arbeitstagen.
Installation
[dependencies]jiff = "0.1"Beispiel: Erstellen eines Intervalls und Prüfen der Zugehörigkeit
use jiff::ZonedInterval;use jiff::tz::TimeZone;
fn main() { let tz = TimeZone::get("Europe/Moscow").unwrap(); let start = tz.to_zoned(2025, 3, 1, 0, 0, 0, 0).unwrap(); let end = tz.to_zoned(2025, 3, 31, 23, 59, 59, 0).unwrap(); let interval = ZonedInterval::new(start, end); let check = tz.to_zoned(2025, 3, 15, 12, 0, 0, 0).unwrap(); println!("Liegt der 15. März im Intervall? {}", interval.contains(&check));}Vorteile: praktisch für Kal
Auch in der Bibliothek
Geolokalisierung und Karten in C++: Überblick über Bibliotheken und Werkzeuge
Caching in Go (Golang): Redis, In-Memory und andere Lösungen
Logging in JavaScript (Node.js): Die besten Lösungen für Ihr Projekt