Trabajo con fechas en Rust: revisión de bibliotecas para el manejo del tiempo

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
```html

Trabajo con fechas en Rust: resumen de bibliotecas clave



El ecosistema de Rust ofrece varias bibliotecas potentes para trabajar con fechas y horas. A diferencia de Python con su módulo integrado datetime, en Rust la biblioteca estándar solo proporciona una funcionalidad mínima (std::time::Instant y Duration), por lo que para tareas serias es necesario recurrir a crates externos. En este artículo, revisaremos tres bibliotecas principales: Chrono, Time y Jiff.



1. Chrono — el estándar de facto



Chrono es la biblioteca más popular (más de 100 millones de descargas). Proporciona un conjunto completo de herramientas para trabajar con fechas, horas, husos horarios y formato.



Funcionalidades principales:

  • NaiveDate, NaiveDateTime — fechas y horas sin huso horario
  • DateTime<Tz> — fecha-hora vinculada a un huso horario
  • Soporte para Duration y operaciones aritméticas
  • Formateo mediante format! y análisis de cadenas
  • Trabajo con calendarios (Gregoriano, ISO)


Ejemplo de código:

use chrono::{DateTime, Utc, NaiveDate, Duration};

fn main() { // Hora actual en UTC let now: DateTime<Utc> = Utc::now(); println!("Hora actual: {}", now.format("%Y-%m-%d %H:%M:%S"));

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

// Aritmética con fechas let future = now + Duration::days(30); println!("En 30 días: {}", future.format("%d.%m.%Y"));

// Análisis de una cadena let parsed = "2025-01-01 12:00:00" .parse::<DateTime<Utc>>() .expect("Formato de fecha inválido"); println!("Parseado: {}", parsed);}


Chrono es excelente para la mayoría de los proyectos, pero puede ser excesivo si solo se necesita funcionalidad básica.



2. Time — una alternativa moderna



El crate Time (desarrollador Jacob Pratt) se posiciona como un reemplazo más seguro y ergonómico para Chrono. Utiliza tipado estricto y evita panics en tiempo de ejecución.



Diferencias clave:

  • Todas las operaciones devuelven Result — sin panics ocultos
  • Sistema de tipos más estricto: tipos separados para fechas, horas, desplazamientos
  • Soporte integrado para ISO 8601 y RFC 3339
  • Menor tamaño y compilación más rápida


Ejemplo de código:

use time::{Date, Month, OffsetDateTime, Duration, format_description};

fn main() -> Result<(), time::Error> { // Hora actual let now = OffsetDateTime::now_utc(); println!("Ahora: {}", now);

// Creación de fecha (sin panic) let date = Date::from_calendar_date(2025, Month::March, 15)?; println!("Fecha: {}", date);

// Aritmética let week_later = now + Duration::weeks(1); println!("En una semana: {}", week_later);

// Análisis con formato explícito let format = format_description::parse("[year]-[month]-[day]")?; let parsed = Date::parse("2025-12-31", &format)?; println!("Parseado: {}", parsed); Ok(())}


Time es una excelente opción para proyectos nuevos donde la seguridad y la previsibilidad son importantes.



3. Jiff — el jugador más reciente



Jiff (de BurntSushi, creador de regex y ripgrep) es la biblioteca más nueva (lanzamiento en 2024). Se centra en el trabajo con husos horarios y la internacionalización.



Características:

  • Base de datos de husos horarios integrada (IANA)
  • Soporte para calendarios no estándar (Islámico, Judío, etc.)
  • Trabajo avanzado con intervalos y periodos
  • Alto rendimiento gracias a cálculos perezosos


Ejemplo de código:

```

Recommendations