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 Auch in der Bibliothek
Aufgabenwarteschlangen in Swift: GCD, OperationQueue und Combine für iOS/macOS
Arbeit mit S3 und Cloud-Speichern in Java: AWS SDK und MinIO
Arbeiten mit Kafka in PHP: Bibliotheken, Verbindung und Codebeispiele
Rate Limiting in Kotlin: Bibliotheken und Implementierung