Trabajo con fechas en Rust: revisión de bibliotecas para tiempo y fechas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con fechas en Rust: revisión de bibliotecas clave



Rust es un lenguaje de programación de sistemas que presta gran atención a la seguridad y el rendimiento. Sin embargo, trabajar con fechas y horas siempre es una tarea compleja debido a las zonas horarias, los segundos intercalares y los formatos. En el ecosistema de Rust existen varias bibliotecas maduras que resuelven estos problemas. En este artículo revisaremos tres bibliotecas principales: chrono, time y jiff, y mostraremos cómo usarlas en la práctica.



1. Chrono — el estándar principal

chrono es la biblioteca más popular para trabajar con fechas en Rust. Proporciona un conjunto completo de herramientas: análisis, formateo, aritmética de fechas, trabajo con zonas horarias y serialización a través de serde.



Instalación a través de Cargo.toml:

[dependencies]chrono = { version = "0.4", features = ["serde"] }


Ejemplo de uso básico:

use chrono::{NaiveDate, NaiveDateTime, Duration, Utc, Local};

fn main() { // Fecha y hora actual en UTC let utc_now = Utc::now(); println!("Ahora en UTC: {}", utc_now.format("%Y-%m-%d %H:%M:%S"));

// Hora local let local_now = Local::now(); println!("Hora local: {}", local_now.format("%d.%m.%Y %H:%M"));

// Creación de una fecha específica let date = NaiveDate::from_ymd_opt(2025, 3, 14).unwrap(); println!("Fecha: {}", date);

// Aritmética de fechas let next_week = date + Duration::days(7); println!("En una semana: {}", next_week);

// Análisis de cadena let parsed = NaiveDateTime::parse_from_str( "2025-12-31 23:59:59", "%Y-%m-%d %H:%M:%S" ).unwrap(); println!("Analizado: {}", parsed);}


2. Biblioteca Time — alternativa moderna

time es una biblioteca más nueva y estricta, desarrollada teniendo en cuenta los errores de chrono. Ofrece una clara separación entre tipos: Date, Time, OffsetDateTime y PrimitiveDateTime. Soporta macros para la creación conveniente de fechas.



Instalación:

[dependencies]time = { version = "0.3", features = ["macros", "serde"] }


Ejemplos:

use time::{Date, Time, OffsetDateTime, macros::datetime, Duration};

fn main() { // Hora actual let now = OffsetDateTime::now_utc(); println!("Ahora: {}", now);

// Creación de fecha mediante macro let meeting = datetime!(2025-06-15 14:30:00 +03:00); println!("Reunión: {}", meeting);

// Extracción de componentes let date = meeting.date(); let time = meeting.time(); println!("Fecha: {}, Hora: {}", date, time);

// Cálculo de diferencia let deadline = datetime!(2025-12-31 00:00:00 UTC); let diff = deadline - now; println!("Hasta la fecha límite: {} días", diff.whole_days());

// Formateo let formatted = now.format( &time::format_description::well_known::Rfc3339 ).unwrap(); println!("RFC 3339: {}", formatted);}


Importante: La biblioteca time es parte de la organización oficial de Rust y se considera más segura, ya que evita pánicos en la mayoría de los métodos (usa Result).



3. Jiff — la nueva estrella

jiff es una biblioteca relativamente nueva que se centra en la ergonomía y el rendimiento. Su característica principal es la detección automática de la zona horaria y el soporte integrado para calendarios (Gregoriano, Islámico, Judío).



Instalación:

[dependencies]jiff = "0.1"


Ejemplo de uso:

use jiff::{Zoned, Timestamp, Unit};

fn main() { // Hora actual con zona horaria let now = Zoned::now(); println!("Hora actual: {}", now);

// Creación a partir de timestamp let ts = Timestamp::new(1_700_000_000, 0

Recommendations