Trechos de timestamp Unix em Rust
Exemplos de Rust para segundos e milissegundos Unix atuais, formatação baseada em chrono e conversão de valores epoch em strings UTC legíveis.
use std::time::{SystemTime, UNIX_EPOCH};
let ts = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_secs();use std::time::{SystemTime, UNIX_EPOCH};
let ms = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_millis();// Cargo.toml: chrono = "0.4"
use chrono::Utc;
Utc::now().timestamp() // seconds
Utc::now().timestamp_millis() // millisecondsuse chrono::{DateTime, TimeZone, Utc};
let dt: DateTime<Utc> = Utc.timestamp_opt(1700000000, 0).unwrap();
println!("{}", dt.to_rfc3339());
println!("{}", dt.format("%Y-%m-%d %H:%M:%S"));Noções básicas de marcas de tempo em Rust
A biblioteca padrão expõe SystemTime e UNIX_EPOCH para cálculos de marcas de tempo sem dependências. duration_since(UNIX_EPOCH) pode ser lido como segundos, milissegundos, microssegundos ou nanossegundos.
Formatando marcas de tempo em Rust
Para datas legíveis, muitos projetos Rust usam a crate chrono. Converta os segundos epoch em um DateTime UTC e depois formate como RFC3339 ou uma string personalizada para logs e interfaces de usuário.
Notas de produção para Rust
A biblioteca padrão do Rust basta para medir durações e ler tempo Unix, enquanto crates como chrono ou time são melhores para formatação de calendário. Mantenha a conversão falível perto do tratamento da entrada, porque marcas de tempo externas podem ser negativas, grandes demais ou expressas na unidade errada.
- Use as_secs() para segundos Unix padrão a partir de SystemTime
- Use as_millis() para marcas de tempo compatíveis com JavaScript
- Use chrono ou time quando precisar de análise, formatação com fuso ou saída RFC3339
- Valide a unidade das marcas de tempo externas antes de armazená-las em structs tipadas
FAQ
- O SystemTime consegue lidar com datas anteriores a 1970?
- O SystemTime pode representar instantes em torno do epoch Unix, mas duration_since(UNIX_EPOCH) retorna um erro para instantes anteriores. Trate esse caso se marcas de tempo externas puderem ser negativas.
- Preciso do chrono para toda marca de tempo?
- Não. A biblioteca padrão basta para segundos e milissegundos Unix atuais. Use chrono ou time quando precisar de análise, formatação ou lógica de calendário.
- Como verifico as unidades de marca de tempo em Rust?
- Converta um valor de amostra para RFC3339 com chrono ou time, depois confirme que corresponde ao contrato da API ou do banco de dados antes de aceitar o campo como segundos ou milissegundos.