Rust Snippets

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.

Current Unix timestamp (seconds)
use std::time::{SystemTime, UNIX_EPOCH};

let ts = SystemTime::now()
    .duration_since(UNIX_EPOCH)
    .unwrap()
    .as_secs();
Current Unix timestamp (milliseconds)
use std::time::{SystemTime, UNIX_EPOCH};

let ms = SystemTime::now()
    .duration_since(UNIX_EPOCH)
    .unwrap()
    .as_millis();
With the chrono crate
// Cargo.toml: chrono = "0.4"
use chrono::Utc;

Utc::now().timestamp()         // seconds
Utc::now().timestamp_millis()  // milliseconds
Format with chrono
use 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.