Librería chrono para Rust: guía completa para trabajar con fechas y horas
1. ¿Qué es y por qué usarla?
La librería chrono es el estándar de facto para trabajar con fechas y horas en el ecosistema Rust. Ofrece una API potente, segura en tipos y ergonómica para analizar, formatear, hacer aritmética y manipular marcas de tiempo. A diferencia de la biblioteca estándar de Rust, que solo ofrece funcionalidades básicas a través de std::time (limitada a duraciones y tiempo del sistema), chrono cubre prácticamente todas las necesidades del desarrollador: desde trabajar con husos horarios hasta realizar cálculos calendáricos complejos.
¿Para qué sirve? Si estás creando una aplicación que debe procesar fechas de nacimiento, registrar eventos con precisión de nanosegundos, generar horarios o trabajar con zonas horarias internacionales, chrono es indispensable. Soporta los formatos ISO 8601, RFC 2822 y RFC 3339, y también permite crear formateadores personalizados. Gracias al estricto sistema de tipos de Rust, chrono ayuda a evitar errores relacionados con fechas inválidas (como el 30 de febrero) o confusiones entre UTC y la hora local.
La librería cuenta con un sólido respaldo de la comunidad, una documentación excelente y se utiliza en miles de proyectos, incluyendo algunos tan conocidos como tokio, actix-web y diesel. La versión 0.4.x es estable y se recomienda para su uso en producción.
2. Instalación
Para añadir chrono a tu proyecto en Rust, usa el gestor de paquetes Cargo. Ejecuta en la terminal, dentro del directorio raíz de tu proyecto:
cargo add chrono
O agrega la dependencia manualmente en el archivo Cargo.toml:
[dependencies]
chrono = "0.4"
Después, ejecuta cargo build para descargar la librería y sus dependencias. Si necesitas trabajar con zonas horarias (por ejemplo, para analizar nombres de ciudades), puede ser necesario incluir las funcionalidades serde o clock:
[dependencies]
chrono = { version = "0.4", features = ["serde"] }
3. Inicio rápido: ejemplo mínimo funcional
Crea un archivo main.rs y pega el siguiente código:
use chrono::{Local, Utc, DateTime, Duration};
fn main() {
// Hora actual en UTC
let utc_now: DateTime = Utc::now();
println!("Hora actual UTC: {}", utc_now);
// Hora local actual
let local_now: DateTime = Local::now();
println!("Hora local actual: {}", local_now);
// Formateo de fecha
println!("Fecha formateada: {}", local_now.format("%Y-%m-%d %H:%M:%S"));
// Aritmética: sumamos 2 días
let future = utc_now + Duration::days(2);
println!("Dentro de 2 días (UTC): {}", future);
}
Ejecuta el programa con el comando cargo run. Verás la hora actual en UTC, la hora local, una cadena formateada y la fecha dentro de dos días.
4. Métodos y funciones principales
A continuación, se presentan 8 métodos y tipos clave de la librería chrono. Para cada uno se incluye su firma, descripción y un ejemplo de código.
4.1. Utc::now()
Firma: pub fn now() -> DateTime<Utc>
Descripción: Devuelve el momento actual en la zona horaria UTC. Es la forma más segura de obtener una marca de tiempo, ya que no depende de la configuración de zona horaria del sistema.
use chrono::Utc;
fn main() {
let now = Utc::now();
println!("Hora actual en UTC: {}", now);
// Salida: 2025-03-15 14:30:00.123456 UTC
}
4.2. Local::now()
Firma: pub fn now() -> DateTime<Local>
Descripción: Devuelve el momento actual en la zona horaria local del sistema.
También en la biblioteca
Bcrypt en JavaScript (Node.js): guía completa con ejemplos
Envío de SMS en C++: API de las bibliotecas libcurl y cpprestsdk
Trabajo con Excel en C++: bibliotecas y herramientas para lectura y escritura