Chrono: Biblioteca de Fechas y Tiempo para Rust
Chrono tiene como objetivo proporcionar toda la funcionalidad necesaria para realizar operaciones correctas con fechas y horas en el calendario gregoriano proléptico:
- El tipo
DateTimees consciente de la zona horaria por defecto, con tipos independientes que no consideran zonas horarias. - Las operaciones que pueden producir una fecha u hora inválida o ambigua devuelven
OptionoMappedLocalTime. - Análisis y formateo configurables con una sintaxis de formato de fecha y hora inspirada en strftime.
- La zona horaria
Localfunciona con la zona horaria local actual del sistema operativo. - Los tipos y operaciones están implementados para ser razonablemente eficientes.
- Para evitar aumentar el tamaño del binario, Chrono no incluye datos de zonas horarias por defecto. Utilice las crates complementarias
Chrono-TZotzfilepara obtener soporte completo de zonas horarias.
Características
Chrono es compatible con varios entornos de ejecución y sistemas operativos, con varias características que se pueden habilitar o deshabilitar.
Características por Defecto:
alloc: Habilita características que dependen de la asignación de memoria (principalmente formateo de cadenas).std: Habilita características que dependen de la biblioteca estándar. Esto es un superconjunto dealloc, añadiendo interoperabilidad con tipos y rasgos de la biblioteca estándar.clock: Habilita la lectura de la zona horaria local (Local). Esto es un superconjunto denow.now: Habilita la lectura de la hora del sistema (now).wasmbind: Proporciona una interfaz a la API de Date de JS para el objetivo wasm32.
Características Opcionales:
serde: Habilita serialización/deserialización a través de serde.rkyv: Obsoleto, utilice las característicasrkyv-*.rkyv-16,rkyv-32,rkyv-64: Habilita serialización/deserialización a través de rkyv, utilizando enteros de 16, 32 o 64 bits respectivamente.rkyv-validation: Habilita soporte de validación de rkyv usando bytecheck.arbitrary: Construye instancias arbitrarias de tipos con la crate Arbitrary.unstable-locales: Habilita la localización. Esto añade varios métodos con el sufijo_localized.
Resumen
Diferencia de Tiempo/Duración
Chrono proporciona el tipo TimeDelta para representar la magnitud de un intervalo de tiempo. Esta es una duración "exacta" representada en segundos y nanosegundos, y no representa componentes "nominales" como días o meses.
El tipo TimeDelta se llamaba anteriormente Duration (todavía disponible como un alias de tipo). Una diferencia notable con la similar core::time::Duration es que es un valor con signo en lugar de sin signo.
Fecha y Hora
Chrono proporciona el tipo DateTime para representar una fecha y hora en una zona horaria.
DateTime es consciente de la zona horaria y debe construirse a partir de un objeto TimeZone, que define cómo se convierte la fecha local desde y hacia UTC. Hay tres implementaciones conocidas de TimeZone:
Utcespecifica la zona horaria UTC. Es la más eficiente.Localespecifica la zona horaria local del sistema.FixedOffsetespecifica una zona horaria de desplazamiento fijo arbitrario, como UTC+09:00 o UTC-10:30.
Los valores DateTime con diferentes tipos de TimeZone son distintos y no se pueden mezclar, pero se pueden convertir entre sí utilizando el método DateTime::with_timezone.
Puede obtener la fecha y hora actual en la zona horaria UTC (Utc::now()) o en la zona horaria local (Local::now()).
Además, puede crear su propia fecha y hora:
Formateo y Análisis
El formateo se realiza a través del método format, cuyo formato es equivalente al conocido formato strftime.
El método por defecto to_string y el especificador {:?} también dan una representación razonable. Chrono también proporciona métodos to_rfc2822 y to_rfc3339 para formatos comunes.
Chrono ahora también proporciona formateo de fechas en casi cualquier idioma sin bibliotecas C adicionales. Esta característica está disponible bajo la característica unstable-locales:
El análisis se puede realizar de dos maneras:
- El rasgo estándar
FromStr(y el métodoparseen cadenas) se puede usar para analizar valoresDateTime<FixedOffset>,DateTime<Utc>yDateTime<Local>. DateTime::parse_from_stranaliza una fecha y hora con un desplazamiento y devuelveDateTime<FixedOffset>.
Conversión desde/hacia Marcas de Tiempo de Época
Construya DateTime<Utc> a partir de una marca de tiempo UNIX usando DateTime::from_timestamp(segundos, nanosegundos).
Obtenga la marca de tiempo (en segundos) de un DateTime usando DateTime.timestamp. Además, puede obtener el número adicional de nanosegundos con DateTime.timestamp_subsec_nanos.
Limitaciones
- Solo se admite el calendario gregoriano proléptico (es decir, extendido para admitir fechas anteriores a la era).
- Los tipos de fecha están limitados a aproximadamente +/- 262,000 años desde la era común.
- Los tipos de tiempo están limitados a una precisión de nanosegundos.
- Los segundos intercalares se pueden representar, pero Chrono no los admite completamente.