Arbeiten mit Daten in Rust: Überblick über Bibliotheken für Zeit und Kalender

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: 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

Empfehlungen