Problema que provoca un error de cálculo de los años bisiestos
El problema del año bisiesto (también conocido como error del año bisiesto o error del día bisiesto ) es un problema para situaciones de almacenamiento de datos y documentación tanto digitales (relacionadas con la computadora) como no digitales que resulta de errores en el cálculo de qué años son bisiestos. años , o de manipular fechas sin tener en cuenta la diferencia entre años bisiestos y años comunes.
Categorías
Los errores de los años bisiestos normalmente se dividen 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 sin fin.
- Aquellos que conducen a datos incorrectos, como problemas uno por 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 today
que sea el 29 de febrero. Luego, intentará crear un 29 de febrero de un año común, que no existe. El date
constructor generará un mensaje ValueError
con el mensaje "el día está fuera del rango del mes". [2]
desde fecha y hora fecha de importación hoy = fecha . hoy () más tarde = hoy . reemplazar ( año = hoy . año + 1 )
windows-c++
El siguiente código de Windows C++ es un ejemplo de un error de año bisiesto de categoría 1. Funcionará correctamente hasta que la fecha actual sea 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, fecha que en realidad no existe. Pasar st
a cualquier función que acepte una SYSTEMTIME
estructura como parámetro probablemente fallará.
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 resultará en ft
que no se inicialice. [3]
TIEMPO DEL SISTEMA st ; FILETIME pies ; GetSystemTime ( & st ); calle . 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 dt
que sea el 29 de febrero. Luego, intentará crear un 29 de febrero de un año común, que no existe. El DateTime
constructor lanzará un ArgumentOutOfRangeException
. [4]
FechaHora dt = FechaHora . Ahora ; Resultado de Fecha y hora = nueva Fecha y hora ( 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 dt
el 29 de febrero, como el 29/02/2020. Luego intentará establecer el año en 2021. Dado que 2021-02-29 no existe, el Date
objeto avanzará hasta la siguiente fecha válida, que es 2021-03-01. [5]
var dt = nueva fecha (); dt . setFullYear ( dt . getFullYear () + 1 );
Mal algoritmo de año bisiesto (muchos idiomas)
El siguiente código es un ejemplo de un error de año bisiesto que se observa en muchos idiomas. Puede causar un impacto de Categoría 1 o de Categoría 2, según para qué se utilice el resultado. Se supone incorrectamente que ocurre un año bisiesto exactamente cada cuatro años. [6]
bool esAñoSalto = año % 4 == 0 ;
El algoritmo de año bisiesto correcto se explica en Algoritmo de año bisiesto .
Ocurrencias
- Microsoft Excel , desde sus primeras versiones, ha considerado incorrectamente que 1900 es un año bisiesto y, por lo tanto, el 29 de febrero se sitúa 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ó intencionalmente en Excel con fines de 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 Ecma Office Open XML (OOXML). [8] [9]
- En 1996, el 31 de diciembre, 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 las computadoras no estaban programadas para manejar el día 366. del año. Los costos de reparación se estimaron en más de 1 millón de dólares neozelandeses . [10]
- En Noruega , el 31 de diciembre de 2000, la compañía ferroviaria nacional Vy descubrió que sus 29 nuevos trenes Signatur no circulaban porque sus ordenadores de a bordo no reconocían la fecha como el día 366 del año. Como medida provisional, los ingenieros reiniciaron los trenes retrasando sus relojes un mes. [11] [12] [13]
- A la medianoche del 31 de diciembre de 2008, muchos [14] modelos Zune 30 de primera generación se congelaron. [15] [16] Microsoft declaró que el problema fue causado por el controlador de reloj interno escrito por Freescale y 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 deseaban esperar fue agotar la batería del dispositivo y luego recargarla 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 funcionaron mal debido a un error de año bisiesto que surgió por primera vez el 31 de marzo. [20]
- En 2012, el historial de chats de Gmail mostraba una fecha del 31 de diciembre de 1969, para todos los chats guardados el 29 de febrero . [ cita necesaria ]
- En 2012, Microsoft Azure quedó fuera de línea debido al error del año bisiesto el 28 de febrero. A las 5:45 p.m. PST, el equipo de Windows Azure se dio cuenta de un problema, aparentemente debido a un cálculo de tiempo incorrecto para el año bisiesto.
- En 2016, se catalogaron una gran cantidad de errores de años bisiestos en la Lista de errores de días bisiestos de 2016 en el sitio web Code of Matt . [21]
- En 2016, un error de año bisiesto en el sistema de transporte de equipaje del aeropuerto de Düsseldorf el 29 de febrero provocó que más de 1.200 maletas perdieran sus vuelos. [22]
- En 2020, se catalogaron una gran cantidad de errores de años bisiestos en la Lista de errores de días bisiestos de 2020 en el sitio web Code of Matt . [23]
- En 2024, se catalogaron una gran cantidad de errores de años bisiestos en la Lista de errores de días bisiestos de 2024 en el sitio web Code of Matt . [24]
- En 2024, un error de año bisiesto en las máquinas de autopago provocó que las estaciones de servicio de pago en surtidor en Nueva Zelanda quedaran fuera de línea durante más de 10 horas. [25]
Ver también
Referencias
- ^ Johnson-Pint, Matt. "¿Cuáles son algunos ejemplos de errores de años bisiestos?". Desbordamiento de pila . Consultado el 5 de febrero de 2020 .
- ^ Johnson-Pint, Matt. "Python: sustitución del año". Desbordamiento de pila . Consultado el 29 de febrero de 2020 .
- ^ Johnson-Pint, Matt. "Manipulación de estructuras Win32 / C++ SYSTEMTIME". Desbordamiento de pila . Consultado el 5 de febrero de 2020 .
- ^ Johnson-Pint, Matt. ".NET / C# - Construcción a partir de piezas de fecha". Desbordamiento de pila . Consultado el 5 de febrero de 2020 .
- ^ Johnson-Pint, Matt. "JavaScript: adición de años". Desbordamiento de pila . Consultado el 5 de febrero de 2020 .
- ^ Johnson-Pint, Matt. "Determinar si un año es bisiesto". Desbordamiento de pila . 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 XML estándar ECMA-376 / Open Office. Consultado el 10 de septiembre de 2016.
- ^ ISO/IEC 29500 / Formatos de archivo XML de Open Office. Consultado el 10 de septiembre de 2016.
- ^ Towler, Jim (7 de enero de 1997). "El error del software del año bisiesto genera un error millonario"". El resumen de RIESGOS . 18 (74). Comité ACM de Computación y Políticas Públicas . Consultado el 5 de febrero de 2020 .
- ^ "La última picadura del gusanillo". Noticias de la BBC . 5 de enero de 2001.
- ^ "Sistemas 7-Eleven afectados por una falla similar al año 2000" . Consultado el 10 de marzo de 2023 .
- ^ "El error Y2K afecta al ferrocarril de Noruega a fin de año". 1 de enero de 2001 . Consultado el 10 de marzo de 2023 .
- ^ "Inicio: respuestas de Microsoft". Foros.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 afectado por una falla misteriosa: 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". AeroXperiencia . Consultado el 5 de enero de 2009 .
- ^ "Sony soluciona el error del año bisiesto de 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'". Noticias de la BBC . 3 de abril de 2012 . Consultado el 5 de febrero de 2020 .
- ^ Johnson-Pint, Matt (29 de febrero de 2016). "Lista de errores de días bisiestos de 2016". Código de Matt . Consultado el 5 de febrero de 2020 .
- ^ "El contratiempo del aeropuerto deja a cientos de pasajeros sin pantalones". El Local (de) . Marzo de 2016 . Consultado el 5 de febrero de 2020 .
- ^ Johnson-Pint, Matt (29 de febrero de 2020). "Lista de errores de los días bisiestos de 2020". Código de Matt . Consultado el 9 de marzo de 2020 .
- ^ "Lista de errores de días bisiestos de 2024". Código de Matt . 2024-02-29 . Consultado el 29 de febrero de 2024 .
- ^ "Los surtidores de gasolina vuelven a estar en línea después de una interrupción de un día atribuida a una falla del año bisiesto". Heraldo de Nueva Zelanda . 2024-03-01 . Consultado el 29 de febrero de 2024 .