Biblioteca chrono para Rust: guia completo para trabalhar com datas e horas
1. O que é e por que usar
A biblioteca chrono é o padrão de facto para trabalhar com datas e horas no ecossistema Rust. Ela oferece uma API poderosa, type-safe e ergonômica para parsing, formatação, aritmética e manipulação de timestamps. Diferente da biblioteca padrão do Rust, que fornece apenas funcionalidades básicas através de std::time (limitada a durações e tempo do sistema), a chrono cobre praticamente todas as necessidades do desenvolvedor: desde fusos horários até cálculos calendáricos complexos.
Por que usar? Se você está desenvolvendo uma aplicação que precisa processar datas de nascimento, registrar eventos com precisão de nanossegundos, criar agendamentos ou trabalhar com fusos horários internacionais — a chrono é essencial. Ela suporta os formatos ISO 8601, RFC 2822, RFC 3339, além de permitir a criação de formatadores personalizados. Graças ao sistema de tipos rigoroso do Rust, a chrono ajuda a evitar erros com datas inválidas (como 30 de fevereiro) ou confusão entre UTC e horário local.
A biblioteca é ativamente mantida pela comunidade, possui documentação excelente e é usada em milhares de projetos, incluindo nomes conhecidos como tokio, actix-web e diesel. A versão 0.4.x é estável e recomendada para uso em produção.
2. Instalação
Para adicionar a chrono ao seu projeto Rust, use o gerenciador de pacotes Cargo. Execute no terminal, no diretório raiz do projeto:
cargo add chrono
Ou adicione manualmente a dependência no arquivo Cargo.toml:
[dependencies]
chrono = "0.4"
Depois, execute cargo build para baixar a biblioteca e suas dependências. Para trabalhar com fusos horários (por exemplo, para parsing de nomes de cidades), pode ser necessário ativar os recursos serde ou clock:
[dependencies]
chrono = { version = "0.4", features = ["serde"] }
3. Início rápido — exemplo mínimo funcional
Crie um arquivo main.rs e cole o seguinte código:
use chrono::{Local, Utc, DateTime, Duration};
fn main() {
// Hora atual em UTC
let utc_now: DateTime = Utc::now();
println!("Hora atual UTC: {}", utc_now);
// Hora local atual
let local_now: DateTime = Local::now();
println!("Hora local atual: {}", local_now);
// Formatação da data
println!("Data formatada: {}", local_now.format("%Y-%m-%d %H:%M:%S"));
// Aritmética: adicionando 2 dias
let future = utc_now + Duration::days(2);
println!("Daqui a 2 dias (UTC): {}", future);
}
Execute o programa com o comando cargo run. Você verá a hora atual em UTC, a hora local, a string formatada e a data daqui a dois dias.
4. Principais métodos/funções
Abaixo estão 8 métodos e tipos essenciais da biblioteca chrono. Para cada um, são fornecidos a assinatura, descrição e exemplo de código.
4.1. Utc::now()
Assinatura: pub fn now() -> DateTime<Utc>
Descrição: Retorna o momento atual no fuso horário UTC. Esta é a forma mais segura de obter um timestamp, pois não depende das configurações de fuso horário do sistema.
use chrono::Utc;
fn main() {
let now = Utc::now();
println!("Hora atual em UTC: {}", now);
// Saída: 2025-03-15 14:30:00.123456 UTC
}
4.2. Local::now()
Assinatura: pub fn now() -> DateTime<Local>
Descrição: Retorna o momento atual no fuso horário local do sistema.