Data em Rust

Manipulando datas e horas

Existe apenas uma função para que se possa obter a data e a hora. É a função chrono.
Para se obter os dados separadamente, existem os seguintes métodos:



No exemplo 1 abaixo obteremos o dia da semana e as horas. Para tal, utilizaremos a variável agora para armazenar data e hora.

Arquivo data_hora/src/main.rs
use chrono::prelude::*; // DateTime, Local, etc.
use chrono::{Datelike, Timelike}; // Para day(), month(), hour(), etc.

fn main() {
    // Data e hora atual
    let agora: DateTime<Local> = Local::now();

    let dia_do_mes = agora.day();
    let dia_da_semana = agora.weekday().number_from_sunday() - 1; // agora vai de 0..=6
    let mes = agora.month0(); // 0 = Janeiro
    let ano = agora.year();

    let horas = agora.hour();
    let minutos = agora.minute();
    let segundos = agora.second();

    // Dias da semana
    let semana = [
        "Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado",
    ];
    let semana_atual = semana[dia_da_semana as usize];

    // Meses
    let meses = [
        "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho",
        "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro",
    ];
    let mes_atual = meses[mes as usize];

    println!("{}, {} de {} de {}", semana_atual, dia_do_mes, mes_atual, ano);
    println!("São: {} horas, {} minutos e {} segundos.", horas, minutos, segundos);
}
Arquivo: Cargo.toml

[package]
name = "data_hora"
version = "0.1.0"
edition = "2024"

[dependencies]
chrono = "0.4"

Resultado:

C:\testerust> cargo new data_hora --bin
C:\testerust> cd data_hora
C:\testerust\data_hora> cargo run

PS C:\testerust\data_hora> target\debug\data_hora.exe
Sexta, 29 de Agosto de 2025
São: 13 horas, 47 minutos e 50 segundos.
C:\testerust\data_hora>

exemplo 4: alterando a data

use chrono::NaiveDate;

fn main() {
    let x_dia = 28;
    let x_mes = 4;   // Em Java seria 3 (Abril, pois começa em 0)
    let x_ano = 1997;

    // Em Rust os meses vão de 1..=12, diferente do Java (0..11)
    let data = NaiveDate::from_ymd_opt(x_ano, x_mes, x_dia).unwrap();

    println!("Data configurada: {}", data); // Saída: 1997-04-28
}

Você pode simplificar as datas veja:

Tanto pode usar esta forma quanto da outra.

Arquivo data_hora/src/main.rs
use chrono::{Datelike, NaiveDate, Weekday};

fn main() {
    let x_dia = 28;
    let x_mes = 4;   // Abril
    let x_ano = 1997;

    // Cria uma data (sem fuso horário)
    let data = NaiveDate::from_ymd_opt(x_ano, x_mes, x_dia).unwrap();

    let dia_do_mes = data.day();
    let dia_da_semana = data.weekday();
    let mes = data.month();
    let ano = data.year();

    // Dias da semana (Java: 1=Domingo ... 7=Sábado)
    let semana = [
        "", "Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado",
    ];

    let indice_semana = match dia_da_semana {
        Weekday::Sun => 1,
        Weekday::Mon => 2,
        Weekday::Tue => 3,
        Weekday::Wed => 4,
        Weekday::Thu => 5,
        Weekday::Fri => 6,
        Weekday::Sat => 7,
    };
    let semana_atual = semana[indice_semana];

    // Meses (Java: 0=Janeiro ... 11=Dezembro)
    let meses = [
        "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho",
        "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro",
    ];
    let mes_atual = meses[(mes - 1) as usize];

    println!("{}, {} de {} de {}", semana_atual, dia_do_mes, mes_atual, ano);
}
Arquivo: Cargo.toml

[package]
name = "data_hora"
version = "0.1.0"
edition = "2024"

[dependencies]
chrono = "0.4"

Resultado:

C:\testerust> cargo new data_hora --bin
C:\testerust> cd data_hora
C:\testerust\data_hora> cargo run

PS C:\testerust\data_hora> target\debug\data_hora.exe
Segunda, 28 de Abril de 1997
C:\testerust\data_hora>