Chrono: Biblioteca de Data e Hora para Rust
Chrono tem como objetivo fornecer toda a funcionalidade necessária para realizar operações corretas com datas e horas no calendário gregoriano proléptico:
- O tipo
DateTimepossui reconhecimento de fuso horário por padrão, com tipos independentes sem fuso horário. - Operações que podem produzir uma data e hora inválidas ou ambíguas retornam
OptionouMappedLocalTime. - Análise e formatação configuráveis com uma sintaxe inspirada no strftime.
- O fuso horário
Localfunciona com o fuso horário local atual do sistema operacional. - Tipos e operações são implementados para serem razoavelmente eficientes.
- Para evitar aumentar o tamanho do binário, o Chrono não inclui dados de fuso horário por padrão. Use as crates complementares
Chrono-TZoutzfilepara suporte completo a fusos horários.
Funcionalidades
Chrono suporta vários ambientes de execução e sistemas operacionais, com diversas funcionalidades que podem ser ativadas ou desativadas.
Funcionalidades Padrão:
alloc: Ativa funcionalidades que dependem de alocação (principalmente formatação de strings).std: Ativa funcionalidades que dependem da biblioteca padrão. É um superconjunto dealloc, adicionando interoperabilidade com tipos e traits da biblioteca padrão.clock: Permite a leitura do fuso horário local (Local). É um superconjunto denow.now: Permite a leitura da hora do sistema (now).wasmbind: Fornece uma interface para a API Date do JS para o target wasm32.
Funcionalidades Opcionais:
serde: Permite serialização/desserialização via serde.rkyv: Obsoleto, use as funcionalidadesrkyv-*.rkyv-16,rkyv-32,rkyv-64: Permitem serialização/desserialização via rkyv, usando inteiros de 16, 32 ou 64 bits respectivamente.rkyv-validation: Permite suporte à validação rkyv usando bytecheck.arbitrary: Constrói instâncias arbitrárias de tipos com a crate Arbitrary.unstable-locales: Ativa a localização. Adiciona vários métodos com o sufixo_localized.
Visão Geral
Diferença de Tempo/Duração
Chrono fornece o tipo TimeDelta para representar a magnitude de um intervalo de tempo. Esta é uma duração "exata" representada em segundos e nanossegundos, e não representa componentes "nominais" como dias ou meses.
O tipo TimeDelta anteriormente era chamado Duration (ainda disponível como um alias de tipo). Uma diferença notável em relação ao core::time::Duration similar é que ele é um valor com sinal em vez de sem sinal.
Data e Hora
Chrono fornece o tipo DateTime para representar uma data e hora em um fuso horário.
DateTime possui reconhecimento de fuso horário e deve ser construído a partir de um objeto TimeZone, que define como a data local é convertida de e para UTC. Existem três implementações conhecidas de TimeZone:
Utcespecifica o fuso horário UTC. É o mais eficiente.Localespecifica o fuso horário local do sistema.FixedOffsetespecifica um fuso horário de deslocamento fixo arbitrário, como UTC+09:00 ou UTC-10:30.
Valores DateTime com diferentes tipos de TimeZone são distintos e não podem ser misturados, mas podem ser convertidos entre si usando o método DateTime::with_timezone.
Você pode obter a data e hora atuais no fuso horário UTC (Utc::now()) ou no fuso horário local (Local::now()).
Além disso, você pode criar sua própria data e hora:
Formatação e Análise
A formatação é feita através do método format, cujo formato é equivalente ao conhecido formato strftime.
O método padrão to_string e o especificador {:?} também fornecem uma representação razoável. Chrono também fornece os métodos to_rfc2822 e to_rfc3339 para formatos comuns.
Chrono agora também fornece formatação de data em quase qualquer idioma sem bibliotecas C adicionais. Esta funcionalidade está disponível sob a feature unstable-locales:
A análise pode ser feita de duas maneiras:
- A trait padrão
FromStr(e o métodoparseem strings) pode ser usado para analisar valoresDateTime<FixedOffset>,DateTime<Utc>eDateTime<Local>. DateTime::parse_from_stranalisa uma data e hora com um deslocamento e retornaDateTime<FixedOffset>.
Conversão de/para Timestamps de Época
Construa DateTime<Utc> a partir de um timestamp UNIX usando DateTime::from_timestamp(seconds, nanoseconds).
Obtenha o timestamp (em segundos) de um DateTime usando DateTime.timestamp. Além disso, você pode obter o número adicional de nanossegundos com DateTime.timestamp_subsec_nanos.
Limitações
- Apenas o calendário gregoriano proléptico é suportado (ou seja, estendido para suportar datas anteriores à era).
- Os tipos de data são limitados a aproximadamente +/- 262.000 anos da era comum.
- Os tipos de hora são limitados à precisão de nanossegundos.
- Segundos bissextos podem ser representados, mas o Chrono não os suporta completamente.