Problema que da lugar a un cálculo erróneo de los años bisiestos
El problema del año bisiesto (también conocido como el error del año bisiesto o el error del día bisiesto ) es un problema tanto para la documentación digital (informática) como para las situaciones de almacenamiento de datos no digitales que resulta de errores en el cálculo de qué años son bisiestos o de la manipulación de fechas sin tener en cuenta la diferencia entre los años bisiestos y los años comunes.
Categorías
Los errores de los años bisiestos suelen dividirse en dos categorías, según el impacto que puedan tener en el uso en el mundo real: [1]
- Aquellos que conducen a condiciones de error, como excepciones, códigos de retorno de error, variables no inicializadas o bucles infinitos.
- Aquellos que conducen a datos incorrectos, como problemas de errores de uno en uno en consultas de rango o agregación.
Ejemplos
Pitón
El siguiente código Python es un ejemplo de un error de año bisiesto de categoría 1. Funcionará correctamente hasta que today
llegue el 29 de febrero. Luego, intentará crear un 29 de febrero de un año común, que no existe. El date
constructor lanzará un ValueError
con el mensaje "el día está fuera del rango para el mes". [2]
desde datetime importar fecha hoy = date . today () más tarde = hoy . replace ( año = hoy . year + 1 )
C++ de Windows
El siguiente código de Windows C++ es un ejemplo de un error de categoría 1 de año bisiesto. Funcionará correctamente hasta que la fecha actual pase a ser el 29 de febrero de un año bisiesto. Luego, se modificará st
para representar el 29 de febrero de un año común, una fecha que en realidad no existe. Es probable que no se pueda pasar st
a cualquier función que acepte una SYSTEMTIME
estructura como parámetro.
Por ejemplo, la SystemTimeToFileTime
llamada que se muestra aquí devolverá un código de error. Dado que ese valor de retorno no está marcado (lo cual es extremadamente común), esto hará que ft
no se inicialice. [3]
TIEMPO DEL SISTEMA st ; TIEMPO DEL ARCHIVO ft ; ObtenerHoraDelSistema ( & st ) ; st.wAño ++ ;SystemTimeToFileTime ( & st , & ft );
Microsoft C#
El siguiente código .NET C# es un ejemplo de un error de año bisiesto de categoría 1. Funcionará correctamente hasta que dt
llegue el 29 de febrero. Luego, intentará crear un 29 de febrero de un año común, que no existe. El DateTime
constructor generará un error ArgumentOutOfRangeException
. [4]
DateTime dt = DateTime . Ahora ; DateTime resultado = new DateTime ( dt . Año + 1 , dt . Mes , dt . Día );
JavaScript
El siguiente código JavaScript es un ejemplo de un error de año bisiesto de categoría 2. Funcionará correctamente hasta que dt
llegue el 29 de febrero, como el 29 de febrero de 2020. Luego, intentará establecer el año en 2021. Como el 29 de febrero de 2021 no existe, el Date
objeto avanzará hasta la siguiente fecha válida, que es el 1 de marzo de 2021. [5]
var dt = new Fecha ( ) ; dt.setFullYear ( dt.getFullYear ( ) + 1 ) ;
Algoritmo incorrecto para el año bisiesto (varios lenguajes)
El código siguiente es un ejemplo de un error de año bisiesto que se observa en muchos lenguajes. Puede causar un impacto de categoría 1 o categoría 2, según para qué se utilice el resultado. Supone incorrectamente que un año bisiesto ocurre exactamente cada cuatro años. [6]
bool isLeapYear = año % 4 == 0 ;
El algoritmo correcto del año bisiesto se explica en Algoritmo del año bisiesto .
Ocurrencias
- Desde sus primeras versiones, Microsoft Excel ha considerado incorrectamente que 1900 es un año bisiesto y, por lo tanto, que el 29 de febrero se encuentra entre el 28 de febrero y el 1 de marzo de ese año. El error se originó en Lotus 1-2-3 y se implementó deliberadamente en Excel con el propósito de lograr compatibilidad con versiones anteriores . Microsoft ha escrito un artículo sobre este error, explicando las razones para tratar 1900 como un año bisiesto. [7] Este error se ha convertido en un requisito en la especificación Office Open XML (OOXML) de Ecma. [8] [9]
- El 31 de diciembre de 1996, en dos plantas de fundición de aluminio en Tiwai Point (Nueva Zelanda) y Bell Bay (Tasmania, Australia), cada una de las 660 computadoras que controlaban las líneas de fundición se apagaron a medianoche, ya que no estaban programadas para manejar el día 366 del año. Los costos de reparación se estimaron en más de un millón de dólares neozelandeses . [10]
- El 31 de diciembre de 2000, la compañía ferroviaria nacional noruega Vy descubrió que sus 29 nuevos trenes Signatur no funcionaban porque sus ordenadores de a bordo no reconocían la fecha correspondiente al día 366 del año. Como medida provisional, los ingenieros reiniciaron los trenes atrasando sus relojes un mes. [11] [12] [13]
- A la medianoche del 31 de diciembre de 2008, muchos [14] modelos de primera generación del Zune 30 se congelaron. [15] [16] Microsoft afirmó que el problema se debía al controlador de reloj interno escrito por Freescale y a la forma en que el dispositivo maneja un año bisiesto. Se arregló automáticamente 24 horas después, pero una "solución" intermedia para aquellos que no querían esperar era agotar la batería del dispositivo y volver a cargarlo después del mediodía UTC del 1 de enero de 2009. [17] [18]
- La PlayStation 3 de Sony trató incorrectamente el año 2010 como un año bisiesto, por lo que el inexistente 29 de febrero de 2010 se mostró el 1 de marzo de 2010 y provocó un error de programa . [19]
- En 2012, los dispositivos de navegación por satélite TomTom dejaron de funcionar debido a un error propio del año bisiesto que surgió por primera vez el 31 de marzo. [20]
- En 2012, el historial de chats de Gmail mostró una fecha del 31 de diciembre de 1969 para todos los chats guardados el 29 de febrero . [ cita requerida ]
- En 2012, Microsoft Azure dejó de estar disponible debido al error del año bisiesto el 28 de febrero. A las 5:45 p. m. (hora estándar del Pacífico), el equipo de Windows Azure se dio cuenta de un problema, aparentemente debido a un cálculo de tiempo que era incorrecto para el año bisiesto.
- En 2016, una gran cantidad de errores de año bisiesto fueron catalogados en la Lista de errores de día bisiesto de 2016 en el sitio web Code of Matt . [21]
- El 29 de febrero de 2016, un error en el sistema de transporte de equipaje del aeropuerto de Düsseldorf provocó que más de 1.200 piezas de equipaje perdieran sus vuelos. [22]
- En 2020, una gran cantidad de errores de año bisiesto fueron catalogados en la Lista de errores de día bisiesto de 2020 en el sitio web Code of Matt . [23]
- En 2024, una gran cantidad de errores de año bisiesto fueron catalogados en la Lista de errores de día bisiesto de 2024 en el sitio web Code of Matt . [24]
- En 2024, un error en las máquinas de autopago en un año bisiesto provocó que las estaciones de servicio con pago en el surtidor en Nueva Zelanda dejaran de funcionar durante más de 10 horas. [25]
Véase también
Referencias
- ^ Johnson-Pint, Matt. "¿Cuáles son algunos ejemplos de errores de año bisiesto?". Stack Overflow . Consultado el 5 de febrero de 2020 .
- ^ Johnson-Pint, Matt. "Python - Reemplazando el año". Desbordamiento de pila . Consultado el 29 de febrero de 2020 .
- ^ Johnson-Pint, Matt. "Manipulación de la estructura SYSTEMTIME en Win32/C++". Desbordamiento de pila . Consultado el 5 de febrero de 2020 .
- ^ Johnson-Pint, Matt. ".NET / C# - Construcción a partir de partes de fecha". Desbordamiento de pila . Consultado el 5 de febrero de 2020 .
- ^ Johnson-Pint, Matt. "JavaScript - Adición de año(s)". Desbordamiento de pila . Consultado el 5 de febrero de 2020 .
- ^ Johnson-Pint, Matt. "Determinar si un año es bisiesto". Stack Overflow . Consultado el 5 de febrero de 2020 .
- ^ Excel supone incorrectamente que el año 1900 es bisiesto. Consultado el 1 de mayo de 2019.
- ^ Formatos de archivo estándar ECMA-376/Open Office XML. Consultado el 10 de septiembre de 2016.
- ^ ISO/IEC 29500 / Formatos de archivos XML de Open Office. Consultado el 10 de septiembre de 2016.
- ^ Towler, Jim (7 de enero de 1997). "Leap-Year software bug provides 'Million-dollar glitch'". The RISKS Digest . 18 (74). Comité de Informática y Política Pública de la ACM . Consultado el 5 de febrero de 2020 .
- ^ "La última picadura del bicho". BBC News . 5 de enero de 2001.
- ^ "Los sistemas 7-Eleven se vieron afectados por un fallo similar al del Y2K" . Consultado el 10 de marzo de 2023 .
- ^ "El problema del año 2000 afecta al ferrocarril noruego a finales de año". 1 de enero de 2001. Consultado el 10 de marzo de 2023 .
- ^ "Inicio - Respuestas de Microsoft". Forums.zune.net. Archivado desde el original el 30 de agosto de 2009. Consultado el 27 de julio de 2011 .
- ^ John Herrman (31 de diciembre de 2008). "Los Zunes de 30 GB fallan en todas partes, todos a la vez". Gizmodo.com . Consultado el 27 de julio de 2011 .
- ^ Geere, Duncan (31 de diciembre de 2008). "ÚLTIMA HORA: Zunes en todo el mundo sufre un accidente misterioso: Tech Digest". Techdigest.tv . Consultado el 27 de julio de 2011 .
- ^ "Preguntas frecuentes sobre Zune 30". Microsoft . 31 de diciembre de 2008. Archivado desde el original el 2 de enero de 2009 . Consultado el 1 de enero de 2009 .
- ^ Zadegan, Bryant (3 de enero de 2009). "Una lección sobre bucles infinitos". AeroXperience . Consultado el 5 de enero de 2009 .
- ^ "Sony corrige el error del año bisiesto en PS3". Metro . 2 de marzo de 2010 . Consultado el 10 de octubre de 2019 .
- ^ "Los dispositivos de navegación por satélite TomTom afectados por el 'error del año bisiesto' del GPS". BBC News . 3 de abril de 2012 . Consultado el 5 de febrero de 2020 .
- ^ Johnson-Pint, Matt (29 de febrero de 2016). «Lista de errores del día bisiesto de 2016». Código de Matt . Consultado el 5 de febrero de 2020 .
- ^ "Un contratiempo en el aeropuerto deja a cientos de pasajeros sin pantalones". The Local (en inglés) . Marzo de 2016. Consultado el 5 de febrero de 2020 .
- ^ Johnson-Pint, Matt (29 de febrero de 2020). «Lista de errores del día bisiesto de 2020». Código de Matt . Consultado el 9 de marzo de 2020 .
- ^ "Lista de errores del día bisiesto de 2024". Código de Matt . 2024-02-29 . Consultado el 2024-02-29 .
- ^ "Las estaciones de servicio vuelven a funcionar tras un corte de un día atribuido a un fallo del año bisiesto". NZ Herald . 2024-03-01 . Consultado el 2024-02-29 .