
Un colega me dijo: "Han pasado exactamente 43871 días desde el 01.01.1900". Hoy es 10.02.2020.
Quería comprobar eso con PowerShell, pero obtuve otro resultado:
PS C:\Windows\system32> New-TimeSpan ([datetime]"01.01.1900") (Get-Date)
Days : 43869
Hours : 11
Minutes : 15
Seconds : 46
Milliseconds : 304
Entonces estaba confundido porque había una diferencia de 2 días. Entonces le pregunté a Google el todopoderoso:
Como puedes ver, Google también dice que han pasado 43869 días, no 43871.
Entonces le pregunté a mi amigo cómo lo calculaba. Lo hizo en Excel, formateando una celda en dateonly
. Cuando luego escribe un int
en él, Excel lo convertirá en una fecha, por ejemplo
15641
se convierte27.10.1942
19874
se convierte30.05.1954
43869
se convierte en08.02.2020
(?)43871
se convierte en10.02.2020
(?)
¿Excel vive 2 días por delante de nosotros o por qué cree que hubo 2 días más de los que realmente hubo desde el 01.01.1900? ¿Le falta algo?
Aquí hay un pequeño gif (desafortunadamente en alemán ya que tengo un Excel alemán):
Respuesta1
El porque:
En primer lugar, tu amigo y Google están calculando de manera diferente. Excel (que utiliza el sistema de fechas de 1900) solo cree que hay un día adicional desde 1900.
Excel almacena las fechas como números de serie donde 1-Jan-1900
= 1
Y 10-Feb-2020
-->43871
Entoncesdias desdepor Excel debería ser 43871
- 1
-->43870
Sin embargo, el cálculo de Excel es incorrecto.
Cuando se introdujo Excel, Lotus123 era el programa de hoja de cálculo líder.
Lotus 123 tenía un error por el que pensaba que el año 1900 era bisiesto.
Por compatibilidad en vista de la competencia, Excel incluyó ese error. Sin embargo, como 29-Feb-1900
es una fecha inexistente, otros métodos mostrarán, correctamente, 43869
al restar las dos fechas.
Por cierto, Excel VBA también calcula correctamente la diferencia de fechas -->43869
Respuesta2
Microsoft Excel admite dos sistemas de fechas diferentes. Estos sistemas son el sistema de fechas de 1900 y el sistema de fechas de 1904.
El sistema de fechas de 1900
En el sistema de fechas 1900, el primer día admitido es el 1 de enero de 1900. Cuando ingresa una fecha, la fecha se convierte en un número de serie que representa la cantidad de días transcurridos comenzando con 1 para el 1 de enero de 1900. Por ejemplo , si ingresa el 5 de julio de 1998, Excel convierte la fecha al número de serie 35981. De forma predeterminada, Microsoft Excel para Windows usa el sistema de fecha 1900. El sistema de fecha 1900 permite una mejor compatibilidad entre Excel y otros programas de hojas de cálculo, como Lotus 1-2-3, que están diseñados para ejecutarse en MS-DOS o Microsoft Windows.
El sistema de fechas de 1904
En el sistema de fechas de 1904, el primer día admitido es el 1 de enero de 1904. Cuando ingresa una fecha, la fecha se convierte en un número de serie que representa la cantidad de días transcurridos desde el 1 de enero de 1904, comenzando con 0 para enero. 1, 1904. Por ejemplo, si ingresa el 5 de julio de 1998, Excel convierte la fecha al número de serie 34519. Debido al diseño de las primeras computadoras Macintosh, no se admitían fechas anteriores al 1 de enero de 1904. Este diseño tenía como objetivo evitar problemas relacionados con el hecho de que 1900 no era un año bisiesto. En el pasado, Excel para Macintosh utilizaba de forma predeterminada el sistema de fechas 1904 para los libros originados en un Macintosh. Sin embargo, Excel para Macintosh ahora utiliza de forma predeterminada el sistema de fechas 1900 y admite fechas tan tempranas como el 1 de enero de 1900.
La diferencia entre los sistemas de fechas
Debido a que los dos sistemas de fechas utilizan días de inicio diferentes, la misma fecha está representada por números de serie diferentes en cada sistema de fechas. Por ejemplo, el 5 de julio de 1998 puede tener dos números de serie diferentes, como se muestra a continuación.
Date system Serial number of July 5, 1998
1900 date system 35981
1904 date system 34519
Fuente: https://docs.microsoft.com/en-us/office/troubleshoot/excel/1900-and-1904-date-system