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

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



Rust ist eine systemnahe Programmiersprache, die großen Wert auf Sicherheit und Leistung legt. Die Arbeit mit Daten und Zeiten ist jedoch aufgrund von Zeitzonen, Schaltsekunden und Formaten immer eine komplexe Aufgabe. Im Rust-Ökosystem gibt es mehrere ausgereifte Bibliotheken, die diese Probleme lösen. In diesem Artikel betrachten wir drei Hauptbibliotheken: chrono, time und jiff, und zeigen, wie man sie in der Praxis einsetzt.



1. Chrono – der primäre Standard

chrono ist die beliebteste Bibliothek für die Arbeit mit Daten in Rust. Sie bietet einen vollständigen Satz von Werkzeugen: Parsing, Formatierung, Datumsarithmetik, Arbeit mit Zeitzonen und Serialisierung über serde.



Installation über Cargo.toml:

[dependencies]chrono = { version = "0.4", features = ["serde"] }


Beispiel für die grundlegende Verwendung:

use chrono::{NaiveDate, NaiveDateTime, Duration, Utc, Local};

fn main() { // Aktuelles Datum und Uhrzeit in UTC let utc_now = Utc::now(); println!("Jetzt in UTC: {}", utc_now.format("%Y-%m-%d %H:%M:%S"));

// Lokale Zeit let local_now = Local::now(); println!("Lokale Zeit: {}", local_now.format("%d.%m.%Y %H:%M"));

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

// Datumsarithmetik let next_week = date + Duration::days(7); println!("In einer Woche: {}", next_week);

// Parsen eines Strings let parsed = NaiveDateTime::parse_from_str( "2025-12-31 23:59:59", "%Y-%m-%d %H:%M:%S" ).unwrap(); println!("Geparst: {}", parsed);}


2. Die Time-Bibliothek – eine moderne Alternative

time ist eine neuere und strengere Bibliothek, die unter Berücksichtigung der Fehler von chrono entwickelt wurde. Sie bietet eine klare Trennung zwischen den Typen: Date, Time, OffsetDateTime und PrimitiveDateTime. Sie unterstützt Makros zur einfachen Erstellung von Daten.



Installation:

[dependencies]time = { version = "0.3", features = ["macros", "serde"] }


Beispiele:

use time::{Date, Time, OffsetDateTime, macros::datetime, Duration};

fn main() { // Aktuelle Zeit let now = OffsetDateTime::now_utc(); println!("Jetzt: {}", now);

// Datumserstellung über Makro let meeting = datetime!(2025-06-15 14:30:00 +03:00); println!("Treffen: {}", meeting);

// Komponenten extrahieren let date = meeting.date(); let time = meeting.time(); println!("Datum: {}, Zeit: {}", date, time);

// Differenz berechnen let deadline = datetime!(2025-12-31 00:00:00 UTC); let diff = deadline - now; println!("Bis zur Frist: {} Tage", diff.whole_days());

// Formatierung let formatted = now.format( &time::format_description::well_known::Rfc3339 ).unwrap(); println!("RFC 3339: {}", formatted);}


Wichtig: Die Bibliothek time ist Teil der offiziellen Rust-Organisation und gilt als sicherer, da sie in den meisten Methoden Panics vermeidet (verwendet Result).



3. Jiff – der neue Star

jiff ist eine relativ neue Bibliothek, die sich auf Ergonomie und Leistung konzentriert. Ihr Hauptmerkmal ist die automatische Erkennung der Zeitzone und die integrierte Unterstützung für Kalender (Gregorianisch, Islamisch, Jüdisch).



Installation:

[dependencies]jiff = "0.1"


Anwendungsbeispiel:

use jiff::{Zoned, Timestamp, Unit};

fn main() { // Aktuelle Zeit mit Zeitzone let now = Zoned::now(); println!("Aktuelle Zeit: {}", now);

// Erstellung aus Timestamp let ts = Timestamp::new(1_700_000_000, 0

Empfehlungen