Trabalhando com datas e horas em Rust: guia completo

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

Trabalhando com datas e horas em Rust: do A ao Z



Trabalhar com datas e horas é uma das tarefas essenciais no desenvolvimento de qualquer aplicação: desde serviços web até sistemas de logging. No Rust, conhecido por sua segurança e desempenho, o trabalho com datas é implementado através da poderosa biblioteca chrono. Neste artigo, abordaremos todos os aspectos de trabalhar com datas e horas: desde operações básicas até manipulações complexas com fusos horários.



1. Instalação e configuração da biblioteca chrono



A biblioteca chrono é o padrão de facto para trabalhar com datas e horas em Rust. Ela fornece um conjunto completo de ferramentas: desde objetos de data simples até tipos complexos com suporte a fusos horários.



Para começar, adicione a dependência no arquivo Cargo.toml:



[dependencies]chrono = "0.4"


Depois disso, importe os módulos necessários no seu código:



use chrono::{NaiveDate, NaiveDateTime, DateTime, Utc, Local, Duration};use chrono::format::ParseError;


2. Tipos de dados principais para trabalhar com datas



No chrono, existem vários tipos-chave que cobrem todas as necessidades do desenvolvedor:



  • NaiveDate — data sem hora e fuso horário (por exemplo, 2024-01-15).
  • NaiveTime — hora sem data e fuso horário (por exemplo, 14:30:00).
  • NaiveDateTime — combinação de data e hora sem fuso horário.
  • DateTime<Tz> — data e hora com indicação de fuso horário (por exemplo, DateTime<Utc> ou DateTime<Local>).


Vamos ver um exemplo de criação de objetos de cada tipo:



// Criando NaiveDatelet date = NaiveDate::from_ymd_opt(2024, 1, 15).unwrap();println!("Data: {}", date); // 2024-01-15

// Criando NaiveTimelet time = NaiveTime::from_hms_opt(14, 30, 0).unwrap();println!("Hora: {}", time); // 14:30:00

// Criando NaiveDateTimelet datetime = NaiveDateTime::new(date, time);println!("Data e hora: {}", datetime); // 2024-01-15 14:30:00

// Criando DateTime com fuso horário UTClet utc_datetime = Utc::now();println!("Hora atual UTC: {}", utc_datetime);

// Criando DateTime com fuso horário locallet local_datetime = Local::now();println!("Hora local atual: {}", local_datetime);


3. Formatação e parsing de datas



Uma das tarefas mais comuns é converter datas em strings e vice-versa. O chrono usa strings de formato semelhantes ao strftime do C.



Formatando data em string



Para formatar, use o método .format():



use chrono::Utc;

let now = Utc::now();

// Formato padrão ISO 8601println!("ISO 8601: {}", now.format("%Y-%m-%dT%H:%M:%S%z"));

// Formato em portuguêsprintln!("Formato português: {}", now.format("%d.%m.%Y %H:%M"));

// Apenas dataprintln!("Apenas data: {}", now.format("%A, %d %B %Y"));

// Saída:// ISO 8601: 2024-01-15T14:30:00+0000// Formato português: 15.01.2024 14:30// Apenas data: Monday, 15 January 2024


Principais especificadores de formato:



  • %Y — ano (4 dígitos)
  • %m — mês (01-12)
  • %d — dia (01-31)
  • %H — horas (00-23)
  • %M — minutos (00-59)
  • %S — segundos (00-59)
  • %z — deslocamento do fuso horário
  • %A — nome completo do dia da semana
  • %B — nome completo do mês


Parsing de string para data



Para converter uma string em data, use o método parse_from_str():



use chrono::NaiveDate;use chrono::format::ParseError;

fn parse_date(dat

Blogs

Book Recommendations