O Chrono visa fornecer todas as funcionalidades necessárias para manipular datas e horas corretamente no calendário gregoriano:
DateTime
é, por padrão, consciente do fuso horário, mas também oferece tipos independentes de fuso.Option
ou MappedLocalTime
.Local
funciona com o fuso atual do sistema operacional.Chrono-TZ
ou tzfile
para suporte completo.O Chrono suporta diversos ambientes e sistemas operacionais, com vários recursos opcionais.
alloc
: Habilita recursos que dependem de alocação de memória (principalmente formatação de strings).std
: Habilita recursos que dependem da biblioteca padrão. Inclui alloc
e adiciona interoperabilidade com tipos da std.clock
: Permite ler o fuso horário local (Local
). Inclui now
.now
: Habilita a leitura do tempo do sistema (now
).wasmbind
: Fornece interface com a API JS Date para alvos wasm32.serde
: Habilita serialização/desserialização via serde.rkyv
: Obsoleto; use rkyv-*
.rkyv-16
, rkyv-32
, rkyv-64
: Habilita serialização via rkyv com inteiros de 16, 32 ou 64 bits.rkyv-validation
: Adiciona suporte à validação do rkyv com bytecheck.arbitrary
: Permite criar instâncias arbitrárias de tipos usando o crate Arbitrary.unstable-locales
: Habilita localização, adicionando métodos com sufixo _localized
.O Chrono fornece o tipo TimeDelta
para representar intervalos de tempo. É uma duração "exata" em segundos e nanossegundos, sem componentes "nominais" como dias ou meses.
Anteriormente chamado Duration
(ainda disponível como alias), difere de core::time::Duration
por ser um valor com sinal.
O Chrono oferece DateTime
para representar datas e horas com fuso horário.
DateTime
requer um objeto TimeZone
, que define como datas locais são convertidas para UTC. Três implementações conhecidas:
Utc
: Fuso UTC (mais eficiente).Local
: Fuso do sistema.FixedOffset
: Fusos fixos arbitrários (ex.: UTC+09:00).DateTime
s de fusos diferentes não podem ser misturados, mas podem ser convertidos via DateTime::with_timezone
.
É possível obter a data/hora atual em UTC (Utc::now()
) ou local (Local::now()
).
Também é possível criar datas/horas manualmente:
A formatação usa o método format
, com sintaxe semelhante ao strftime.
O método padrão to_string
e o especificador {:?}
também fornecem representações legíveis. Chrono ainda oferece to_rfc2822
e to_rfc3339
para formatos comuns.
Com o recurso unstable-locales
, é possível formatar datas em vários idiomas:
O parsing pode ser feito de duas formas:
FromStr
(e o método parse
) pode ser usado para DateTime<FixedOffset>
, DateTime<Utc>
e DateTime<Local>
.DateTime::parse_from_str
analisa datas/horas com offset, retornando DateTime<FixedOffset>
.Use DateTime::from_timestamp(segundos, nanossegundos)
para criar um DateTime<Utc>
a partir de um timestamp UNIX.
Use DateTime.timestamp
para obter o timestamp (em segundos) de um DateTime
. Para nanossegundos adicionais, use DateTime.timestamp_subsec_nanos
.