Arbeiten mit Datum und Uhrzeit in Rust: Vollständiger Leitfaden

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

Einführung in die Arbeit mit Datum und Zeit in Rust



Die Arbeit mit Datum und Zeit ist eine der Kernaufgaben in den meisten modernen Anwendungen. Ob Ereignisprotokollierung, Berechnung von Fristen, Verarbeitung von Zeitstempeln aus APIs oder die Arbeit mit Kalendern – ohne eine hochwertige Bibliothek für die Zeitarbeit kommt man nicht aus. Im Rust-Ökosystem bietet die Standardbibliothek nur grundlegende Funktionen (std::time::Instant und std::time::Duration), die für Leistungsmessungen geeignet sind, aber nicht für die vollwertige Arbeit mit Kalenderdaten.



Hier kommt die Crate chrono zur Hilfe – der De-facto-Standard für die Arbeit mit Datum und Zeit in Rust. Sie bietet eine breite Funktionalität: von der Erstellung einfacher Daten bis zur Arbeit mit Zeitzonen, Formatierung und Arithmetik. In diesem Artikel werden wir die wichtigsten Funktionen von chrono im Detail besprechen, praktische Beispiele geben und zeigen, wie man typische Fehler vermeidet.



1. Installation und grundlegende Typen von chrono



Fügen Sie zunächst die Abhängigkeit zu Ihrer Cargo.toml hinzu:



[dependencies]chrono = "0.4"


Danach können Sie die benötigten Typen importieren. Chrono bietet drei Schlüsseltypen zur Darstellung von Datum und Zeit:



  • NaiveDate – Datum ohne Zeit (Jahr, Monat, Tag).
  • NaiveDateTime – Datum und Zeit ohne Berücksichtigung der Zeitzone.
  • DateTime<Tz> – Datum und Zeit mit Bindung an eine Zeitzone (z. B. Utc oder Local).


Betrachten wir ein einfaches Beispiel zur Erstellung dieser Typen:



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

fn main() { // Erstellen eines naiven Datums (ohne Zeit) let date = NaiveDate::from_ymd_opt(2025, 10, 15).unwrap(); println!("Datum: {}", date);

// Erstellen einer naiven Zeit (ohne Datum) let time = NaiveTime::from_hms_opt(14, 30, 0).unwrap(); println!("Zeit: {}", time);

// Kombinieren zu NaiveDateTime let naive_dt = NaiveDateTime::new(date, time); println!("Naiver datetime: {}", naive_dt);

// Aktuelle Zeit in UTC und lokal let now_utc: DateTime<Utc> = Utc::now(); let now_local: DateTime<Local> = Local::now(); println!("Jetzt UTC: {}", now_utc); println!("Jetzt lokal: {}", now_local);}


Beachten Sie die Verwendung von from_ymd_opt und from_hms_opt – sie geben Option zurück, was vor der Erstellung ungültiger Daten schützt (z. B. 32. Januar).



2. Formatierung und Parsen von Daten



Chrono verwendet ein leistungsstarkes Formatierungssystem basierend auf Spezifikatoren, das strftime aus C/PHP sehr ähnlich ist. Dies ermöglicht eine flexible Umwandlung von Daten in Zeichenketten und zurück.



2.1 Formatierung eines Datums in eine Zeichenkette



use chrono::{Utc, DateTime};

fn main() { let now: DateTime<Utc> = Utc::now(); // Standard ISO 8601 println!("ISO: {}", now.to_rfc3339()); // Benutzerdefiniertes Format println!("Benutzerdefiniert: {}", now.format("%Y-%m-%d %H:%M:%S")); println!("Wochentag: {}", now.format("%A")); println!("Monat: {}", now.format("%B")); println!("Jahr-Monat-Tag: {}", now.format("%d.%m.%Y"));}


Wichtige Formatierungsspezifikatoren:

  • %Y – Jahr (4 Ziffern)
  • %m – Monat (01-12)
  • %d – Tag des Monats (01-31)
  • %H – Stunden (00-23)
  • %M – Minuten (00-59)
  • %S – Sekunden (00-60)
  • %A – Vollständiger Name des Wochentags
  • %B – Vollständiger Name des Monats


2.2 Parsen einer Zeichenkette in ein Datum



Für die umgekehrte Umwandlung wird die Methode parse_from_str verwendet:



use chrono::{NaiveDateTime, DateTime, Utc, format::ParseResult};                

Blogs

Buchempfehlungen