Chrono: Rust Datums- und Zeitbibliothek
Chrono zielt darauf ab, alle Funktionen bereitzustellen, die für korrekte Operationen mit Datums- und Zeitangaben im proleptischen gregorianischen Kalender benötigt werden:
- Der
DateTime-Typ ist standardmäßig zeitzonenbewusst, mit separaten zeitzonenunabhängigen Typen. - Operationen, die ein ungültiges oder mehrdeutiges Datum und Uhrzeit erzeugen könnten, geben
OptionoderMappedLocalTimezurück. - Konfigurierbares Parsen und Formatieren mit einer von strftime inspirierten Datums- und Zeitformatierungssyntax.
- Die
Local-Zeitzone funktioniert mit der aktuellen lokalen Zeitzone des Betriebssystems. - Typen und Operationen sind implementiert, um angemessen effizient zu sein.
- Um die Binärgröße nicht zu erhöhen, liefert Chrono standardmäßig keine Zeitzonendaten mit. Verwenden Sie die Begleit-Crates
Chrono-TZodertzfilefür vollständige Zeitzonenunterstützung.
Funktionen
Chrono unterstützt verschiedene Laufzeitumgebungen und Betriebssysteme mit mehreren Funktionen, die aktiviert oder deaktiviert werden können.
Standardfunktionen:
alloc: Aktiviert Funktionen, die von Allokation abhängen (hauptsächlich Zeichenkettenformatierung).std: Aktiviert Funktionen, die von der Standardbibliothek abhängen. Dies ist eine Obermenge vonallocund fügt Interoperabilität mit Standardbibliothekstypen und -traits hinzu.clock: Aktiviert das Lesen der lokalen Zeitzone (Local). Dies ist eine Obermenge vonnow.now: Aktiviert das Lesen der Systemzeit (now).wasmbind: Bietet eine Schnittstelle zur JS Date API für das wasm32-Ziel.
Optionale Funktionen:
serde: Aktiviert Serialisierung/Deserialisierung via serde.rkyv: Veraltet, verwenden Sie dierkyv-*-Funktionen.rkyv-16,rkyv-32,rkyv-64: Aktiviert Serialisierung/Deserialisierung via rkyv unter Verwendung von 16-Bit-, 32-Bit- bzw. 64-Bit-Ganzzahlen.rkyv-validation: Aktiviert rkyv-Validierungsunterstützung mit bytecheck.arbitrary: Konstruiert beliebige Instanzen von Typen mit der Arbitrary-Crate.unstable-locales: Aktiviert Lokalisierung. Dies fügt verschiedene Methoden mit dem Suffix_localizedhinzu.
Überblick
Zeitdifferenz/Dauer
Chrono stellt den TimeDelta-Typ bereit, um die Größe eines Zeitintervalls darzustellen. Dies ist eine "exakte" Dauer, dargestellt in Sekunden und Nanosekunden, und repräsentiert keine "nominalen" Komponenten wie Tage oder Monate.
Der TimeDelta-Typ wurde früher Duration genannt (noch als Typalias verfügbar). Ein bemerkenswerter Unterschied zur ähnlichen core::time::Duration ist, dass es sich um einen vorzeichenbehafteten Wert handelt.
Datum und Uhrzeit
Chrono stellt den DateTime-Typ bereit, um ein Datum und eine Uhrzeit in einer Zeitzone darzustellen.
DateTime ist zeitzonenbewusst und muss aus einem TimeZone-Objekt konstruiert werden, das definiert, wie das lokale Datum zu und von UTC konvertiert wird. Es gibt drei bekannte TimeZone-Implementierungen:
Utcgibt die UTC-Zeitzone an. Sie ist am effizientesten.Localgibt die lokale Systemzeitzone an.FixedOffsetgibt eine beliebige feste Offset-Zeitzone an, z.B. UTC+09:00 oder UTC-10:30.
DateTime-Werte mit verschiedenen TimeZone-Typen sind unterschiedlich und können nicht gemischt werden, können aber mithilfe der Methode DateTime::with_timezone ineinander umgewandelt werden.
Sie können das aktuelle Datum und die Uhrzeit in der UTC-Zeitzone (Utc::now()) oder in der lokalen Zeitzone (Local::now()) abrufen.
Zusätzlich können Sie eigene Datums- und Zeitangaben erstellen:
Formatierung und Parsing
Die Formatierung erfolgt über die format-Methode, deren Format dem bekannten strftime-Format entspricht.
Die standardmäßige to_string-Methode und der {:?}-Spezifizierer liefern ebenfalls eine angemessene Darstellung. Chrono bietet auch to_rfc2822- und to_rfc3339-Methoden für gängige Formate.
Chrono bietet jetzt auch Datumsformatierung in fast jeder Sprache ohne zusätzliche C-Bibliotheken. Diese Funktion ist unter der unstable-locales-Funktion verfügbar:
Das Parsing kann auf zwei Arten erfolgen:
- Das standardmäßige
FromStr-Trait (und dieparse-Methode auf Zeichenketten) kann verwendet werden, umDateTime<FixedOffset>,DateTime<Utc>undDateTime<Local>-Werte zu parsen. DateTime::parse_from_strparst ein Datum und eine Uhrzeit mit einem Offset und gibtDateTime<FixedOffset>zurück.
Konvertierung zu/von Epochen-Timestamps
Konstruieren Sie DateTime<Utc> aus einem UNIX-Timestamp mit DateTime::from_timestamp(seconds, nanoseconds).
Holen Sie sich den Timestamp (in Sekunden) von einem DateTime mit DateTime.timestamp. Zusätzlich können Sie die zusätzliche Anzahl von Nanosekunden mit DateTime.timestamp_subsec_nanos erhalten.
Einschränkungen
- Nur der proleptische gregorianische Kalender wird unterstützt (d.h., erweitert zur Unterstützung von Daten vor der Ära).
- Datumstypen sind auf ungefähr +/- 262.000 Jahre von der gemeinsamen Ära beschränkt.
- Zeittypen sind auf Nanosekundengenauigkeit beschränkt.
- Schaltsekunden können dargestellt werden, aber Chrono unterstützt sie nicht vollständig.