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 También en la biblioteca
gRPC para JavaScript (Node.js): bibliotecas y ejemplos de código
Envío de SMS en C++: API de las bibliotecas libcurl y cpprestsdk
Geolocalización y mapas en C# (.NET): resumen de bibliotecas y herramientas
Lottie Android para Kotlin: guía completa con ejemplos