Trabalho com datas em Rust: visão geral das bibliotecas para tempo e calendário

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

Trabalho com datas em Rust: bibliotecas para tempo e calendário



Rust é uma linguagem de programação de sistema moderna que oferece tipagem estrita e segurança de memória. No entanto, a biblioteca padrão do Rust fornece apenas recursos mínimos para trabalhar com datas e horas. Para um trabalho completo com calendários, fusos horários, formatação e cálculos, os desenvolvedores usam crates de terceiros. Neste artigo, analisaremos detalhadamente três bibliotecas principais: chrono, time e jiff, além de fornecer exemplos práticos.



1. Biblioteca chrono — o padrão de facto



chrono é a biblioteca mais popular para trabalhar com datas em Rust. Ela fornece uma API rica para criação, manipulação e formatação de datas e horas. Os tipos principais são: NaiveDate, NaiveDateTime, DateTime (considerando o fuso horário) e Duration.



Instalação

# Cargo.toml[dependencies]chrono = "0.4"


Exemplo: data e hora atuais

use chrono::{Local, Utc};

fn main() { let now_utc = Utc::now(); let now_local = Local::now(); println!("UTC: {}", now_utc); println!("Local: {}", now_local);}


Exemplo: análise de string e formatação

use chrono::NaiveDate;

fn main() { let date = NaiveDate::parse_from_str("2025-03-15", "%Y-%m-%d") .expect("Formato de data inválido"); println!("Dia: {}", date.format("%d.%m.%Y"));}


Vantagens: comunidade enorme, suporte a fusos horários via chrono-tz, trabalho com intervalos e durações.



Desvantagens: tamanho relativamente grande, complexidade ao trabalhar com calendários não padrão.



2. Biblioteca time — alternativa leve



time é uma biblioteca mais moderna e leve que está em desenvolvimento ativo. Ela usa um sistema de tipos rigoroso para prevenir erros (por exemplo, separação entre Date, Time, OffsetDateTime e PrimitiveDateTime).



Instalação

[dependencies]time = "0.3"


Exemplo: criação de data e cálculo de diferença

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

fn main() { let start = Date::from_calendar_date(2025, Month::March, 10).unwrap(); let end = Date::from_calendar_date(2025, Month::March, 20).unwrap(); let diff = end - start; println!("Diferença: {} dias", diff.whole_days());}


Exemplo: formatação

use time::OffsetDateTime;use time::format_description::well_known::Rfc3339;

fn main() { let now = OffsetDateTime::now_utc(); let formatted = now.format(&Rfc3339).unwrap(); println!("RFC 3339: {}", formatted);}


Vantagens: tamanho pequeno, separação clara de tipos, documentação excelente.



Desvantagens: menos exemplos na internet do que chrono.



3. Biblioteca jiff — para intervalos de alta precisão



jiff é uma biblioteca especializada para trabalhar com intervalos de calendário e eventos recorrentes. Ela é útil para tarefas de agendamento, lembretes e cálculo de dias úteis.



Instalação

[dependencies]jiff = "0.1"


Exemplo: criação de intervalo e verificação de pertencimento

use jiff::ZonedInterval;use jiff::tz::TimeZone;

fn main() { let tz = TimeZone::get("Europe/Moscow").unwrap(); let start = tz.to_zoned(2025, 3, 1, 0, 0, 0, 0).unwrap(); let end = tz.to_zoned(2025, 3, 31, 23, 59, 59, 0).unwrap(); let interval = ZonedInterval::new(start, end); let check = tz.to_zoned(2025, 3, 15, 12, 0, 0, 0).unwrap(); println!("O dia 15 de março está no intervalo? {}", interval.contains(&check));}


Vantagens: conveniente para calend

Recommendations