chrono para Rust: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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.

Recommendations