Trabajo con fechas y horas en Rust: guía completa

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 y horas en Rust: de la A a la Z



Trabajar con fechas y horas es una de las tareas clave en el desarrollo de cualquier aplicación: desde servicios web hasta sistemas de registro. En Rust, conocido por su seguridad y rendimiento, el trabajo con fechas se implementa a través de la potente biblioteca chrono. En este artículo, analizaremos todos los aspectos del trabajo con fechas y horas: desde operaciones básicas hasta manipulaciones complejas con zonas horarias.



1. Instalación y configuración de la biblioteca chrono



La biblioteca chrono es el estándar de facto para trabajar con fechas y horas en Rust. Proporciona un conjunto completo de herramientas: desde objetos de fecha simples hasta tipos complejos que tienen en cuenta las zonas horarias.



Para comenzar, agregue la dependencia en el archivo Cargo.toml:



[dependencies]chrono = "0.4"


Después de esto, importe los módulos necesarios en su código:



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


2. Tipos de datos principales para trabajar con fechas



En chrono existen varios tipos clave que cubren todas las necesidades del desarrollador:



  • NaiveDate — fecha sin hora ni zona horaria (por ejemplo, 2024-01-15).
  • NaiveTime — hora sin fecha ni zona horaria (por ejemplo, 14:30:00).
  • NaiveDateTime — combinación de fecha y hora sin zona horaria.
  • DateTime<Tz> — fecha y hora con indicación de zona horaria (por ejemplo, DateTime<Utc> o DateTime<Local>).


Veamos un ejemplo de creación de objetos de cada tipo:



// Creación de NaiveDatelet date = NaiveDate::from_ymd_opt(2024, 1, 15).unwrap();println!("Fecha: {}", date); // 2024-01-15

// Creación de NaiveTimelet time = NaiveTime::from_hms_opt(14, 30, 0).unwrap();println!("Hora: {}", time); // 14:30:00

// Creación de NaiveDateTimelet datetime = NaiveDateTime::new(date, time);println!("Fecha y hora: {}", datetime); // 2024-01-15 14:30:00

// Creación de DateTime con zona horaria UTClet utc_datetime = Utc::now();println!("Hora actual UTC: {}", utc_datetime);

// Creación de DateTime con zona horaria locallet local_datetime = Local::now();println!("Hora local actual: {}", local_datetime);


3. Formato y análisis de fechas



Una de las tareas más comunes es convertir fechas a cadenas y viceversa. chrono utiliza cadenas de formato similares a strftime de C.



Formato de fecha a cadena



Para formatear, use el método .format():



use chrono::Utc;

let now = Utc::now();

// Formato estándar ISO 8601println!("ISO 8601: {}", now.format("%Y-%m-%dT%H:%M:%S%z"));

// Formato en españolprintln!("Formato español: {}", now.format("%d.%m.%Y %H:%M"));

// Solo fechaprintln!("Solo fecha: {}", now.format("%A, %d %B %Y"));

// Salida:// ISO 8601: 2024-01-15T14:30:00+0000// Formato español: 15.01.2024 14:30// Solo fecha: Monday, 15 January 2024


Especificadores de formato principales:



  • %Y — año (4 dígitos)
  • %m — mes (01-12)
  • %d — día (01-31)
  • %H — horas (00-23)
  • %M — minutos (00-59)
  • %S — segundos (00-59)
  • %z — desplazamiento de zona horaria
  • %A — nombre completo del día de la semana
  • %B — nombre completo del mes


Análisis de cadena a fecha



Para convertir una cadena en una fecha, use el método parse_from_str():



use chrono::NaiveDate;use chrono::format::ParseError;

fn parse_date(dat

Blogs

Book Recommendations