Trabalhando com datas em Rust: visão geral das bibliotecas para processamento de tempo

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
```html

Trabalho com datas em Rust: visão geral das principais bibliotecas



O ecossistema Rust oferece várias bibliotecas poderosas para trabalhar com datas e horas. Ao contrário do Python com seu módulo embutido datetime, em Rust a biblioteca padrão fornece apenas funcionalidade mínima (std::time::Instant e Duration), portanto, para tarefas sérias, é necessário recorrer a crates externos. Neste artigo, vamos examinar três bibliotecas principais: Chrono, Time e Jiff.



1. Chrono — o padrão de facto



Chrono é a biblioteca mais popular (mais de 100 milhões de downloads). Ela fornece um conjunto completo de ferramentas para trabalhar com datas, horas, fusos horários e formatação.



Principais recursos:

  • NaiveDate, NaiveDateTime — datas e horas sem fuso horário
  • DateTime<Tz> — data-hora com vínculo a um fuso horário
  • Suporte para Duration e operações aritméticas
  • Formatação através de format! e parsing de strings
  • Trabalho com calendários (Gregoriano, ISO)


Exemplo de código:

use chrono::{DateTime, Utc, NaiveDate, Duration};

fn main() { // Hora atual em UTC let now: DateTime<Utc> = Utc::now(); println!("Hora atual: {}", now.format("%Y-%m-%d %H:%M:%S"));

// Criando uma data específica let date = NaiveDate::from_ymd_opt(2025, 3, 15).unwrap(); println!("Data: {}", date);

// Aritmética com datas let future = now + Duration::days(30); println!("Daqui a 30 dias: {}", future.format("%d.%m.%Y"));

// Parsing de string let parsed = "2025-01-01 12:00:00" .parse::<DateTime<Utc>>() .expect("Formato de data inválido"); println!("Parseado: {}", parsed);}


Chrono é excelente para a maioria dos projetos, mas pode ser excessivo se apenas a funcionalidade básica for necessária.



2. Time — alternativa moderna



O crate Time (desenvolvedor Jacob Pratt) se posiciona como uma substituição mais segura e ergonômica para Chrono. Ele usa tipagem estrita e evita panics em tempo de execução.



Principais diferenças:

  • Todas as operações retornam Result — sem panics ocultos
  • Sistema de tipos mais rigoroso: tipos separados para datas, horas, offsets
  • Suporte embutido para ISO 8601 e RFC 3339
  • Tamanho menor e compilação mais rápida


Exemplo de código:

use time::{Date, Month, OffsetDateTime, Duration, format_description};

fn main() -> Result<(), time::Error> { // Hora atual let now = OffsetDateTime::now_utc(); println!("Agora: {}", now);

// Criando data (sem panic) let date = Date::from_calendar_date(2025, Month::March, 15)?; println!("Data: {}", date);

// Aritmética let week_later = now + Duration::weeks(1); println!("Daqui a uma semana: {}", week_later);

// Parsing com formato explícito let format = format_description::parse("[year]-[month]-[day]")?; let parsed = Date::parse("2025-12-31", &format)?; println!("Parseado: {}", parsed); Ok(())}


Time é uma excelente escolha para novos projetos onde segurança e previsibilidade são importantes.



3. Jiff — o mais novo player



Jiff (de BurntSushi, criador do regex e ripgrep) é a biblioteca mais recente (lançamento em 2024). Ela foca no trabalho com fusos horários e internacionalização.



Características:

  • Base de dados de fusos horários embutida (IANA)
  • Suporte para calendários não padrão (Islâmico, Judaico, etc.)
  • Trabalho avançado com intervalos e períodos
  • Alta performance devido a cálculos lazy


Exemplo de código:

```

Recommendations