martes, 8 de noviembre de 2011

El error del 29 de febrero de 1900

La duración del año el tiempo que tarda la tierra en dar una vuelta alrededor del sol es aproximadamente 365,25 días. Éste es el valor que se utilizó para elaborar el calendario juliano (46 a.C.). Si consideramos que el año tiene 365 días, despreciamos 1/4 de día, por lo que cada 4 años es necesario añadir un día para ajustar el desfase. Ese año tendrá 366 días y se llama año bisiesto.

Cuando se confeccionó el calendario gregoriano (1582 d.C.) se empleó un dato más preciso: 365,2425. En este calendario (el actual), al añadir 1 día cada 4 años no se ajusta el desfase ya que 0,2425x4=0,97. Por tanto, es necesario quitar 3 días cada 400 años para que el ajuste sea exacto. En efecto, el error cometido cada año es de 0,25-0,2425=0,0075 días; si lo multiplicamos por 400 y lo dividimos por 3, obtenemos 1 día: 0,0075x400/3=1.

También se estableció (igual que en el calendario juliano) que fueran bisiestos los años múltiplos de 4, excepto las centurias (los años que terminan en dos ceros) que debían ser múltiplos de 400. Así, 1700, 1800, 1900 ó 2100 no son bisiestos, pero sí lo son 1600, 2000 ó 2400.

La cosa está clara: 1900 no fue bisiesto. El mes de febrero de 1900 tuvo 28 días.

Hagamos un experimento. Pongamos a una celda el formato: dddd, dd "de" mmmm "de" aaaa. Escribamos en esa celda 29/02/1900. Obtendremos, para nuestra sorpresa, el siguiente resultado: miércoles, 29 de febrero de 1900.

¿Por qué Excel considera válida una fecha que no lo es?

Parece que el error no se le debe atribuir a Microsoft sino a Lotus. En 1983, los programadores de Lotus 123 cometieron el error de considerar bisiesto el año 1900. Puesto que Lotus 123, la hoja de cálculo más popular en aquella época, es anterior a la primera versión de Excel (1985), los responsables de Microsoft, que querían crear un programa para competir con Lotus y conocían el fallo, reprodujeron el error para conseguir la máxima compatibilidad con el programa de su rival.

¿Cómo afrontó Microsoft este problema? Es bien sabido que en Excel el calendario empieza el 1 de enero de 1900. Ese día fue lunes pero Microsoft tuvo que pasarlo a domingo. De ese modo, a partir del 1 de marzo de 1900 (que fue jueves), todos los días se ajustaron perfectamente.

Hagamos otro experimento. Pongamos en una hoja estos valores:

Aplicando el formato de fecha d/mmm/aaaa, obtendremos:

Como el 2 de enero de 1900 fue lunes (aunque sabemos que, en realidad, fue martes), al asignar a las celdas el formato dddd, obtendremos los días de la semana.

Nota: La duración señalada para el cálculo del calendario gregoriano tampoco es exacta. La cifra correcta es 365,242189 días por año. Esto significa que cada 3300 años debe quitarse un día. Desde que se implantó el calendario hasta el día de hoy han transcurrido menos de 500 años; aún falta mucho para el ajuste.

1 comentario:

  1. ¡¡Muchas gracias por tu excelente explicación!!

    Acabo de programar una función en VBA que sustituye a la función de excel FIN.MES() y me encontré con que excel no interpreta correctamente los dos primeros meses de 1900.

    Después de hacer las comprobaciones oportunas, llegué a la conclusión de que debía tratarse de un bug de excel y me ha alegrado mucho ver confirmadas mis sospechas leyendo tu magnífica explicación.

    Un saludo y ¡¡muchas gracias!!.

    ResponderEliminar