Chrono: Libreria di Data e Ora per Rust
Chrono mira a fornire tutte le funzionalità necessarie per eseguire operazioni corrette su date e orari nel calendario gregoriano prolettico:
- Il tipo
DateTimeè consapevole del fuso orario per impostazione predefinita, con tipi separati che non considerano il fuso orario. - Le operazioni che potrebbero produrre una data o un orario non validi o ambigui restituiscono
OptionoMappedLocalTime. - Parsing e formattazione configurabili con una sintassi di formattazione data/ora ispirata a strftime.
- Il fuso orario
Localfunziona con il fuso orario locale corrente del sistema operativo. - I tipi e le operazioni sono implementati per essere ragionevolmente efficienti.
- Per evitare di aumentare la dimensione del binario, Chrono non include dati sui fusi orari per impostazione predefinita. Utilizza le crate complementari
Chrono-TZotzfileper il supporto completo dei fusi orari.
Caratteristiche
Chrono supporta vari ambienti di runtime e sistemi operativi, con diverse funzionalità che possono essere abilitate o disabilitate.
Funzionalità Predefinite:
alloc: Abilita funzionalità che dipendono dall'allocazione (principalmente formattazione di stringhe).std: Abilita funzionalità che dipendono dalla libreria standard. Questo è un superset dialloc, aggiungendo interoperabilità con tipi e tratti della libreria standard.clock: Abilita la lettura del fuso orario locale (Local). Questo è un superset dinow.now: Abilita la lettura dell'ora di sistema (now).wasmbind: Fornisce un'interfaccia all'API JS Date per il target wasm32.
Funzionalità Opzionali:
serde: Abilita serializzazione/deserializzazione tramite serde.rkyv: Deprecato, utilizza le funzionalitàrkyv-*.rkyv-16,rkyv-32,rkyv-64: Abilita serializzazione/deserializzazione tramite rkyv, utilizzando rispettivamente interi a 16, 32 o 64 bit.rkyv-validation: Abilita il supporto alla validazione rkyv utilizzando bytecheck.arbitrary: Costruisce istanze arbitrarie di tipi con la crate Arbitrary.unstable-locales: Abilita la localizzazione. Aggiunge vari metodi con il suffisso_localized.
Panoramica
Differenza Temporale/Durata
Chrono fornisce il tipo TimeDelta per rappresentare l'entità di un intervallo di tempo. Questa è una durata "esatta" rappresentata in secondi e nanosecondi, e non rappresenta componenti "nominali" come giorni o mesi.
Il tipo TimeDelta era precedentemente chiamato Duration (ancora disponibile come alias di tipo). Una differenza notevole rispetto al simile core::time::Duration è che è un valore con segno piuttosto che senza segno.
Data e Ora
Chrono fornisce il tipo DateTime per rappresentare una data e un'ora in un fuso orario.
DateTime è consapevole del fuso orario e deve essere costruito da un oggetto TimeZone, che definisce come la data locale viene convertita da e verso UTC. Ci sono tre implementazioni note di TimeZone:
Utcspecifica il fuso orario UTC. È il più efficiente.Localspecifica il fuso orario locale del sistema.FixedOffsetspecifica un fuso orario a offset fisso arbitrario, come UTC+09:00 o UTC-10:30.
I valori DateTime con tipi TimeZone diversi sono distinti e non possono essere mescolati, ma possono essere convertiti l'uno nell'altro utilizzando il metodo DateTime::with_timezone.
Puoi ottenere la data e l'ora corrente nel fuso orario UTC (Utc::now()) o nel fuso orario locale (Local::now()).
Inoltre, puoi creare la tua data e ora:
Formattazione e Parsing
La formattazione viene eseguita tramite il metodo format, il cui formato è equivalente al familiare formato strftime.
Il metodo predefinito to_string e lo specificatore {:?} forniscono anche una rappresentazione ragionevole. Chrono fornisce anche i metodi to_rfc2822 e to_rfc3339 per formati comuni.
Chrono ora fornisce anche la formattazione delle date in quasi tutte le lingue senza librerie C aggiuntive. Questa funzionalità è disponibile sotto la feature unstable-locales:
Il parsing può essere eseguito in due modi:
- Il tratto standard
FromStr(e il metodoparsesulle stringhe) può essere utilizzato per analizzare valoriDateTime<FixedOffset>,DateTime<Utc>eDateTime<Local>. DateTime::parse_from_stranalizza una data e un'ora con un offset e restituisceDateTime<FixedOffset>.
Conversione da/a Timestamp Epoch
Costruisci DateTime<Utc> da un timestamp UNIX utilizzando DateTime::from_timestamp(seconds, nanoseconds).
Ottieni il timestamp (in secondi) da un DateTime utilizzando DateTime.timestamp. Inoltre, puoi ottenere il numero aggiuntivo di nanosecondi con DateTime.timestamp_subsec_nanos.
Limitazioni
- È supportato solo il calendario gregoriano prolettico (cioè esteso per supportare date precedenti all'era).
- I tipi di data sono limitati a circa +/- 262.000 anni dall'era comune.
- I tipi di ora sono limitati alla precisione del nanosecondo.
- I secondi intercalari possono essere rappresentati, ma Chrono non li supporta completamente.