Date::ITALY es una constante de Ruby que guarda el número del día juliano (2299161) en el que Italia realizó el cambio del calendario juliano al gregoriano. Este artículo explora cómo Ruby maneja las fechas históricas complejas mediante constantes de calendario.
El calendario juliano, creado por Julio César, acumulaba un error de aproximadamente un día cada 128 años. Para corregir este desfase, el Papa Gregorio XIII emitió en 1582 la bula Inter gravissimas, que estableció que el día siguiente al 4 de octubre de 1582 sería el 15 de octubre, eliminando 10 días. Sin embargo, países protestantes como Inglaterra no adoptaron el calendario gregoriano hasta 1752, lo que crea confusión al trabajar con fechas históricas.
Ruby resuelve este problema mediante un sistema de números del día juliano, una cuenta continua de días desde el 1 de enero de 4713 a.C. al mediodía UTC, cuando tres ciclos importantes sincronizaron: el solar de 28 años, el lunar de 19 años y el de indicción de 15 años. Este sistema permite convertir entre diferentes calendarios sin ambigüedades.
Las constantes Date::ITALY, Date::ENGLAND y otras definen cuándo cada región adoptó el calendario gregoriano. Por ejemplo, Date.new(1642, 12, 25, Date::ENGLAND) representa correctamente el cumpleaños de Isaac Newton según el calendario inglés de su época. Ruby impide crear fechas dentro del período omitido (5-14 de octubre de 1582 para Italia) y las salta automáticamente al iterar.
Los casos de uso incluyen aplicaciones genealógicas, sistemas históricos o cualquier software que maneje fechas europeas anteriores a 1752. También permite definir transiciones personalizadas para otros países que adoptaron el gregoriano más tarde, como Rusia en 1918.
Las consideraciones importantes son que estos ajustes solo cubren un cambio de calendario; si surgieran nuevos sistemas, sería necesario expandir la arquitectura. Además, el sistema asume que el cambio ocurre en una sola fecha, lo cual puede no reflejar la realidad de regiones con implementaciones graduales.
