
Esta pregunta se basa en las observaciones deAdamVensu respuestaen¿Cómo puedo colocar el nombre del día en una celda en Excel?
Cuando A1 tiene el valor 2009-08-01, entonces:
=WEEKDAY(A1)
obtendrá7
=TEXT(7, "dddd")
obtendráSaturday
=TEXT(7,"dddd, yyyy-mm-dd")
obtendráSaturday, 1900-01-07
=TEXT(1,"dddd, yyyy-mm-dd")
obtendráSunday, 1900-01-01
=TEXT("1900-01-01","dddd, yyyy-mm-dd")
también obtendráSunday, 1900-01-01
Los dos últimos están equivocados: el 1 de enero de 1900 es en realidad lunes.
Varias fuentes parecen confirmar que:
- Enero de 1900: Wikipedia, la enciclopedia libre.
- Calendario Año 1900 – Países Bajos.
- Calendario Año 1900 – Estados Unidos.
¿Qué me estoy perdiendo? ¿Por qué Excel hace esto mal?
Respuesta1
Como se describe en MicrosoftKB 214058:
Los días de la semana anteriores al 1 de marzo de 1900 son incorrectos en Excel
MÁS INFORMACIÓN
Cuando se creó originalmente el sistema de fechas en Microsoft Excel, se diseñó para que fuera totalmente compatible con los sistemas de fechas utilizados por otros programas de hojas de cálculo.
Sin embargo, en este sistema de fechas, el año 1900 se interpreta incorrectamente como año bisiesto. Debido a que no existe el 29 de febrero ("día bisiesto") en el año 1900, el día de la semana para cualquier fecha anterior al 1 de marzo de 1900 (el día después del "día bisiesto") no se calcula correctamente.
Los "otros programas de hojas de cálculo" se refieren aLoto 1-2-3, que era bastante popular en aquel entonces, y asumió incorrectamente que el año 1900 era bisiesto. Esto se explica aún más detalladamente enKB 214326:
Excel 2000 supone incorrectamente que el año 1900 es bisiesto
MÁS INFORMACIÓN
Cuando se lanzó Lotus 1-2-3 por primera vez, el programa asumió que el año 1900 era bisiesto, aunque en realidad no lo era. Esto facilitó que el programa manejara los años bisiestos y no causó ningún daño a casi todos los cálculos de fechas en Lotus 1-2-3.
Cuando se lanzaron Microsoft Multiplan y Microsoft Excel, también asumieron que 1900 era un año bisiesto. Esta suposición permitió a Microsoft Multiplan y Microsoft Excel utilizar el mismo sistema de fecha de serie utilizado por Lotus 1-2-3 y proporcionar una mayor compatibilidad con Lotus 1-2-3. Tratar 1900 como un año bisiesto también facilitó a los usuarios mover hojas de trabajo de un programa a otro.
Aunque es técnicamente posible corregir este comportamiento para que las versiones actuales de Microsoft Excel no supongan que 1900 es un año bisiesto, las desventajas de hacerlo superan las ventajas.
Si se corrigiera este comportamiento, surgirían muchos problemas, incluidos los siguientes:
- Casi todas las fechas de las hojas de cálculo actuales de Microsoft Excel y otros documentos se reducirían en un día. Corregir este cambio requeriría mucho tiempo y esfuerzo, especialmente en fórmulas que utilizan fechas.
- Algunas funciones, como la función DÍA SEMANAL, devolverían valores diferentes; esto podría provocar que las fórmulas de las hojas de cálculo funcionen incorrectamente.
- Corregir este comportamiento rompería la compatibilidad de fechas de serie entre Microsoft Excel y otros programas que usan fechas.
Si el comportamiento no se corrige, sólo se produce un problema:
- La función WEEKDAY devuelve valores incorrectos para fechas anteriores al 1 de marzo de 1900. Dado que la mayoría de los usuarios no utilizan fechas anteriores al 1 de marzo de 1900, este problema es poco común.
Respuesta2
He aquí el motivo explicado por el propio Joel:Mi primera revisión de BillG
Basic utiliza el 31 de diciembre de 1899 como época en lugar del 1 de enero de 1900, pero por alguna razón, la fecha de hoy era la misma en Excel que en Basic.
¿Eh?
Fui a buscar un desarrollador de Excel que tuviera la edad suficiente para recordar por qué. Ed Fries parecía saber la respuesta.
"Oh", me dijo. "Echa un vistazo al 28 de febrero de 1900".
"Son 59", dije.
"Ahora prueba el 1 de marzo".
"¡Son 61!"
"¿Qué pasó con 60?" preguntó Ed.
"El 29 de febrero de 1900 fue un año bisiesto. ¡Es divisible por 4!"
"Buena suposición, pero no cigarro", dijo Ed, y me dejó pensando por un momento.
Ups. Investigué un poco. Los años divisibles por 100 no son bisiestos, a menos que también sean divisibles por 400.
1900 no fue un año bisiesto.
"¡Es un error en Excel!" exclamé.
"Bueno, en realidad no", dijo Ed. "Tuvimos que hacerlo de esa manera porque necesitamos poder importar hojas de trabajo de Lotus 123".
"Entonces, ¿es un error en Lotus 123?"
"Sí, pero probablemente intencional. Lotus tenía que caber en 640K. Eso no es mucha memoria. Si ignoras 1900, puedes determinar si un año determinado es bisiesto simplemente mirando si los dos bits más a la derecha son cero. Eso es realmente rápido y fácil. Los chicos de Lotus probablemente pensaron que no importaba estar equivocados hace dos meses.
Respuesta3
Una solución a esto es agregar 400 años al año, para calcular el día de la semana como en la siguiente fórmula:
=WEEKDAY(DATE(A4+400,B4,C4),1)
Entonces las siguientes variables
A4 = 1834
B4 = 12
C4 = 14
volvería 1
(domingo), que es lo mismo que para el 14 de diciembre de 2234.
Esto deja de funcionar para fechas anteriores a 1753
, el año posterior al cambio al calendario gregoriano.