¡Ojo con las fechas en R y quizás en otros lenguajes!
- fjroar
- 7 abr 2024
- 3 Min. de lectura
En ocasiones hay cálculos que se tienen asumidos como muy sencillos pero que si no se tiene cuidado, para determinados casos, se puede caer en errores de bulto.
Uno de esos cálculos es ¿Cuál es la diferencia de días entre 2 fechas? Y quizás el papa Gregorio XIII tiene mucho que ver en eso como trataré de mostrar a continuación.
Como imagino que sabéis estoy inmerso en la construcción de una biblioteca sobre la luna denominada RMoon y dado que tengo que emplear fechas antiguas, me he encontrado con problemas de cálculo que pensaba que en R estaban asumidos y veo que no. El hecho es que cuando se ponen las líneas:
diferencia1
El resultado que se obtiene es:
Time difference of -11 days
Y claramente está mal, es decir, no hay 11 días de diferencia entre esas 2 fechas si no tan sólo 1 y es que difftime no tiene en cuenta la reforma del calendario que llevo a cabo el citado papa. Para más inri, antes del 1582-10-04, las fechas que se suelen usar en la mayoría de los libros de historia (de nuestro entorno cultural) van con un criterio de Calendario Juliano, mientras que las que son posteriores se cambia el criterio a Gegoriano y ¿Qué significa esto? Pues cualquiera puede leer que Colón llegó a américo más o menos el 12 de Octubre de 1492 que por cierto, es cuando se celebra el día de la hispanidad y demás pero si nos fiamos de Rbase, dicha fecha ocurrió exactamente en un número de días entre el 4 de Octubre de 1582 y el 12 de Octubre de 1492 de 32963 días tal y como se puede observar haciendo simplemente:
Y entonces si se echa el tiempo atrás se llegaría a la conclusión de que la llegada sería el 13 y no el 12 ya que interfiere el año 1500 que según el calendario gregoriano no es bisiesto mientras que sí lo es en el Juliano, de hecho si se aplica la anterior fórmula a:
Se obtiene que la diferencia es 1 (y da error si se trata de usar “1500-02-29” ya que considera que no existe).
El no hacer el adecuado cambio de calendario antes y después de la reforma gregoriana tiene sus repercusiones, porque a nivel astronómico las definiciones de inicio de la cuenta de los días julianos cambiaría y además hay fases lunares e incluso eclipses que caen en 29 de Febreros y que están datados como tales y cambiarían.
En general todas los cálculos de diferencias de fechas pasan por una conversión a días Julianos, difftime es fiable desde 1582-10-15, pero si se mezclan fechas antes y después de esa fecha, deben usarse cálculos más finos que tengan en cuenta las restricciones mencionadas, así por ejemplo bajo la librería RMoon se ha creado la siguiente función que permite además hacer uso de matrices y calcular fechas simultáneamente por lo que vamos a ver varios ejemplos a la vez:
library(RMoon)
M1 <-matrix(nrow = 3, ncol = 6)
M2 <-matrix(nrow = 3, ncol = 6)
M1[1, ] <- c(1582, 10, 4, 0, 0, 0)
M1[2, ] <- c(1582, 10, 4, 0, 0, 0)
M1[3, ] <- c(1492, 10, 12, 0, 0, 0)
M2[1, ] <- c(1582, 10, 15, 0, 0, 0)
M2[2, ] <- c(1582, 10, 16, 0, 0, 0)
M2[3, ] <- c(1582, 10, 4, 0, 0, 0)
DiffDaysMeeus(M1, M2)
En este caso destaca el último valor que es un día más desde el 1582-10-04 hasta 1492-10-12, y ese día existió, se tiene que considerar porque era el calendario Juliano el imperante en la época, eliminarlo provocaría pequeños desfases que si se usan para hacer cálculos astronómicos (o incluso históricos) pueden tener su importancia.
Para finalizar, que nadie se asuste y se ponga a corregir los programas de R que haya hecho con difftime() sobre todo si los cálculos son con fechas recientes, para éstas no hay problemas. Por otro lado, la anterior función está relacionada con otras de Rbase como julian.Date() y julian() que usan bases distintas a las consideradas por expertos como Jean Meeus y la comunidad astronómica, por lo que visto lo que pasa con difftime() si os vais a fechas remotas, tened cuidado con los cálculos y los criterios que se utilicen al usar también las mencionadas funciones.
Comments