Arbeiten mit Datum und Uhrzeit in Rust: Von A bis Z
\n\nDas Arbeiten mit Datum und Uhrzeit ist eine der Kernaufgaben bei der Entwicklung jeder Anwendung: von Webdiensten bis hin zu Protokollierungssystemen. In Rust, bekannt für seine Sicherheit und Leistung, wird die Arbeit mit Datum und Uhrzeit über die leistungsstarke Bibliothek chrono realisiert. In diesem Artikel behandeln wir alle Aspekte der Arbeit mit Datum und Uhrzeit: von grundlegenden Operationen bis hin zu komplexen Manipulationen mit Zeitzonen.
1. Installation und Konfiguration der chrono-Bibliothek
\n\nDie Bibliothek chrono ist der De-facto-Standard für die Arbeit mit Datum und Uhrzeit in Rust. Sie bietet einen vollständigen Satz an Werkzeugen: von einfachen Datumsobjekten bis hin zu komplexen Typen unter Berücksichtigung von Zeitzonen.
Um zu beginnen, fügen Sie die Abhängigkeit in Ihre Cargo.toml-Datei ein:
[dependencies]\nchrono = "0.4"\n\nImportieren Sie anschließend die erforderlichen Module in Ihren Code:
\n\nuse chrono::{NaiveDate, NaiveDateTime, DateTime, Utc, Local, Duration};\nuse chrono::format::ParseError;\n\n2. Grundlegende Datentypen für die Arbeit mit Datum und Uhrzeit
\n\nIn chrono gibt es mehrere Schlüsseltypen, die alle Anforderungen von Entwicklern abdecken:
- \n
NaiveDate— Datum ohne Uhrzeit und Zeitzone (z. B. 2024-01-15). \n NaiveTime— Uhrzeit ohne Datum und Zeitzone (z. B. 14:30:00). \n NaiveDateTime— Kombination von Datum und Uhrzeit ohne Zeitzone. \n DateTime<Tz>— Datum und Uhrzeit mit Angabe der Zeitzone (z. B.DateTime<Utc>oderDateTime<Local>). \n
Betrachten wir ein Beispiel zur Erstellung von Objekten jedes Typs:
\n\n// Erstellen von NaiveDate\nlet date = NaiveDate::from_ymd_opt(2024, 1, 15).unwrap();\nprintln!("Datum: {}", date); // 2024-01-15\n\n// Erstellen von NaiveTime\nlet time = NaiveTime::from_hms_opt(14, 30, 0).unwrap();\nprintln!("Uhrzeit: {}", time); // 14:30:00\n\n// Erstellen von NaiveDateTime\nlet datetime = NaiveDateTime::new(date, time);\nprintln!("Datum und Uhrzeit: {}", datetime); // 2024-01-15 14:30:00\n\n// Erstellen von DateTime mit UTC-Zeitzone\nlet utc_datetime = Utc::now();\nprintln!("Aktuelle UTC-Zeit: {}", utc_datetime);\n\n// Erstellen von DateTime mit lokaler Zeitzone\nlet local_datetime = Local::now();\nprintln!("Aktuelle lokale Zeit: {}", local_datetime);\n\n3. Formatierung und Parsing von Datumsangaben
\n\nEine der häufigsten Aufgaben ist die Umwandlung von Datumsangaben in Zeichenketten und umgekehrt. chrono verwendet Formatstrings, die strftime aus C ähneln.
Formatierung eines Datums in eine Zeichenkette
\n\nVerwenden Sie für die Formatierung die Methode .format():
use chrono::Utc;\n\nlet now = Utc::now();\n\n// Standardformat ISO 8601\nprintln!("ISO 8601: {}", now.format("%Y-%m-%dT%H:%M:%S%z"));\n\n// Deutsches Format\nprintln!("Deutsches Format: {}", now.format("%d.%m.%Y %H:%M"));\n\n// Nur Datum\nprintln!("Nur Datum: {}", now.format("%A, %d %B %Y"));\n\n// Ausgabe:\n// ISO 8601: 2024-01-15T14:30:00+0000\n// Deutsches Format: 15.01.2024 14:30\n// Nur Datum: Monday, 15 January 2024\n\nWichtige Formatspezifizierer:
\n\n- \n
%Y— Jahr (4 Ziffern) \n %m— Monat (01-12) \n %d— Tag (01-31) \n %H— Stunden (00-23) \n %M— Minuten (00-59) \n %S— Sekunden (00-59) \n %z— Zeitzonenversatz \n %A— Vollständiger Wochentagsname \n %B— Vollständiger Monatsname \n
Parsing einer Zeichenkette in ein Datum
\n\nVerwenden Sie für die Umwandlung einer Zeichenkette in ein Datum die Methode parse_from_str():
use chrono::NaiveDate;\nuse chrono::format::ParseError;\n\nfn parse_date(dat