Fragmentos de timestamp Unix en Rust
Ejemplos de Rust para segundos y milisegundos Unix actuales, formateo basado en chrono y conversión de valores epoch en cadenas UTC legibles.
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"));Conceptos básicos de marcas de tiempo en Rust
La biblioteca estándar expone SystemTime y UNIX_EPOCH para cálculos de marcas de tiempo sin dependencias. duration_since(UNIX_EPOCH) puede leerse como segundos, milisegundos, microsegundos o nanosegundos.
Formatear marcas de tiempo en Rust
Para fechas legibles, muchos proyectos de Rust usan el crate chrono. Convierte los segundos epoch a un DateTime UTC y luego formatea como RFC3339 o una cadena personalizada para registros e interfaces de usuario.
Notas de producción para Rust
La biblioteca estándar de Rust basta para medir duraciones y leer tiempo Unix, mientras que crates como chrono o time son mejores para el formateo de calendario. Mantén la conversión falible cerca del manejo de la entrada, porque las marcas de tiempo externas pueden ser negativas, demasiado grandes o estar expresadas en la unidad equivocada.
- Usa as_secs() para segundos Unix estándar desde SystemTime
- Usa as_millis() para marcas de tiempo compatibles con JavaScript
- Usa chrono o time cuando necesites análisis, formateo con zona horaria o salida RFC3339
- Valida las unidades de las marcas de tiempo externas antes de almacenarlas en structs tipadas
FAQ
- ¿Puede SystemTime manejar fechas anteriores a 1970?
- SystemTime puede representar instantes alrededor del epoch Unix, pero duration_since(UNIX_EPOCH) devuelve un error para instantes anteriores. Maneja ese caso si las marcas de tiempo externas pueden ser negativas.
- ¿Necesito chrono para cada marca de tiempo?
- No. La biblioteca estándar basta para segundos y milisegundos Unix actuales. Usa chrono o time cuando necesites análisis, formato o lógica de calendario.
- ¿Cómo verifico las unidades de marca de tiempo en Rust?
- Convierte un valor de muestra a RFC3339 con chrono o time, luego confirma que coincide con el contrato de la API o la base de datos antes de aceptar el campo como segundos o milisegundos.