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

Introdução ao trabalho com datas e horas em Rust

Trabalhar com datas e horas é uma das tarefas essenciais em qualquer aplicação moderna. Seja para registro de eventos, agendamento de tarefas, processamento de dados do usuário ou trabalho com APIs — não é possível prescindir do gerenciamento correto de timestamps. Na linguagem Rust, conhecida por seu desempenho e segurança, a biblioteca padrão fornece apenas um conjunto mínimo de ferramentas para trabalhar com tempo. No entanto, vem em auxílio a poderosa crate chrono, que se tornou o padrão de facto para trabalhar com datas e horas no ecossistema Rust.

Neste artigo, vamos detalhar como instalar e usar chrono, como criar, formatar, fazer parsing e manipular datas, bem como trabalhar com fusos horários e timestamps Unix.



Instalação e inclusão da crate chrono

Para começar, é necessário adicionar a dependência chrono no arquivo Cargo.toml do seu projeto:

[dependencies]chrono = "0.4"

Depois disso, você pode importar os tipos e traits necessários no código:

use chrono::{DateTime, Utc, Local, NaiveDate, NaiveDateTime, Duration, Datelike, Timelike, TimeZone};

A crate chrono oferece vários tipos chave para representar datas e horas:

  • NaiveDate — data sem hora e fuso horário (exemplo: 2024-01-15).
  • NaiveTime — hora sem data e fuso horário (exemplo: 14:30:00).
  • NaiveDateTime — combinação de data e hora sem considerar fuso horário.
  • DateTime<Utc> — data e hora com fuso horário UTC.
  • DateTime<Local> — data e hora com o fuso horário local do sistema.
  • DateTime<FixedOffset> — data e hora com um deslocamento arbitrário do UTC.


Criação e obtenção da hora atual

A maneira mais simples de obter o momento atual é usar as funções Utc::now() e Local::now():

use chrono::{Utc, Local};

fn main() { let utc_now: DateTime<Utc> = Utc::now(); let local_now: DateTime<Local> = Local::now(); println!("Hora atual UTC: {}", utc_now); println!("Hora local atual: {}", local_now);}

Para criar uma data específica, você pode usar os métodos NaiveDate::from_ymd e NaiveDateTime::new:

use chrono::{NaiveDate, NaiveDateTime, NaiveTime};

fn main() { // Criando a data 15 de março de 2024 let date = NaiveDate::from_ymd(2024, 3, 15); println!("Data: {}", date); // Criando a hora 10:30:00 let time = NaiveTime::from_hms(10, 30, 0); println!("Hora: {}", time); // Combinação de data e hora let datetime = NaiveDateTime::new(date, time); println!("Data e hora: {}", datetime);}

Você também pode criar uma data com fuso horário usando o método and_hms da data:

use chrono::{Utc, TimeZone};

fn main() { let datetime_utc = Utc.ymd(2024, 12, 25).and_hms(12, 0, 0); println!("Natal UTC: {}", datetime_utc);}


Formatação e parsing de datas

Formatação de saída

Para converter uma data em string, usa-se o método format, que aceita uma string de formato. Os especificadores de formato são análogos aos da linguagem Python e outras linguagens:

use chrono::{Utc, DateTime};

fn main() { let now = Utc::now(); // Formatação básica println!("Padrão: {}", now.format("%Y-%m-%d %H:%M:%S")); println!("Apenas data: {}", now.format("%d.%m.%Y")); println!("Com nome do mês: {}", now.format("%d %B %Y")); println!("Hora com segundos: {}", now.format("%H:%M:%S")); println!("Unix timestamp: {}", now.timestamp());}

Blogs

Book Recommendations