Articulo de referencia

El problema del año bisiesto

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 que afecta tanto a la documentación digital (relaciona...

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 que afecta tanto a la documentación digital (relacionada con la informática) como a la analógica y al almacenamiento de datos, y 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 del mundo real: [ 1 ]

  1. Aquellas que dan lugar a condiciones de error, como excepciones, códigos de retorno de error, variables no inicializadas o bucles infinitos.
  2. Aquellos que conducen a datos incorrectos, como problemas de desfase de 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 todayque llegue el 29 de febrero. Entonces, intentará crear un 29 de febrero de un año común, que no existe. El dateconstructor generará una excepción ValueErrorcon el mensaje "el día está fuera del rango para el mes". [ 2 ]

from datetime import date today = date . today () later = today . replace ( year = today . year + 1 )

Windows C++

El siguiente código C++ para Windows es un ejemplo de un error de categoría 1 relacionado con los años bisiestos. Funcionará correctamente hasta que la fecha actual sea el 29 de febrero de un año bisiesto. Entonces, se modificará stpara representar el 29 de febrero de un año común, una fecha que en realidad no existe. Pasar stuna estructura a cualquier función que acepte una SYSTEMTIMEestructura como parámetro probablemente provocará un error.

Por ejemplo, la SystemTimeToFileTimellamada que se muestra aquí devolverá un código de error. Dado que ese valor de retorno no se verifica (lo cual es extremadamente común) , esto resultará en que quede sin inicializar. [ 3 ]ft

TIEMPO DEL SISTEMA st ; TIEMPO DEL ARCHIVO ft ;ObtenerSystemTime ( & st ); st . wYear ++ ;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 dtque llegue el 29 de febrero. Entonces, intentará crear un 29 de febrero de un año común, que no existe. El DateTimeconstructor lanzará una excepción ArgumentOutOfRangeException. [ 4 ]

DateTime dt = DateTime.Now ; DateTime result = new DateTime ( dt.Year + 1 , dt.Month , dt.Day ) ;

JavaScript

El siguiente código JavaScript es un ejemplo de un error de año bisiesto de categoría 2. Funcionará correctamente hasta dtque llegue el 29 de febrero, como el 29/02/2020. Entonces intentará establecer el año en 2021. Como el 29/02/2021 no existe, el Dateobjeto avanzará a la siguiente fecha válida, que es el 01/03/2021. [ 5 ]

var dt = new Date (); dt . setFullYear ( dt . getFullYear () + 1 );

Algoritmo deficiente para años bisiestos (varios idiomas)

El siguiente código es un ejemplo de un error relacionado con el año bisiesto que se observa en muchos lenguajes de programación. Puede causar un impacto de Categoría 1 o Categoría 2, dependiendo del uso que se le dé al resultado. Asume erróneamente que un año bisiesto ocurre exactamente cada cuatro años. [ 6 ]

bool isBisiesto = año % 4 == 0 ;

El algoritmo correcto para el año bisiesto se explica aquí: .

Ocurrencias

  • Desde sus primeras versiones, Microsoft Excel ha considerado erróneamente 1900 como 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 fin de garantizar la compatibilidad con versiones anteriores . Microsoft ha publicado 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 de la especificación Ecma Office Open XML (OOXML). [ 8 ] [ 9 ]
  • El  31 de diciembre de 1996, en dos plantas de fundición de aluminio ubicadas en Tiwai Point (Nueva Zelanda) y Bell Bay (Tasmania, Australia), los 660 ordenadores que controlaban las líneas de fundición se apagaron a medianoche, ya que no estaban programados para gestionar el día 366 del año (1996 fue un año bisiesto y tuvo como día de febrero el  29). Los costes de reparación se estimaron en más de 1 millón de dólares neozelandeses . [ 10 ]
  • En 2000, el  31 de diciembre, en Noruega , la compañía ferroviaria nacional Vy descubrió que sus 29 nuevos trenes Signatur no funcionaban porque sus computadoras 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 medianoche del  31 de diciembre de 2008, muchos [ 14 ] modelos Zune 30 de primera generación se bloquearon. [ 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 solucionó automáticamente 24 horas después, pero una "solución" intermedia para aquellos que no deseaban esperar era 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ó erróneamente el año 2010 como bisiesto, por lo que el inexistente  29 de febrero de 2010 se mostró el  1 de marzo de 2010 y causó un error de programa . [ 19 ]
  • En 2012, los dispositivos de navegación por satélite TomTom fallaron debido a un error del año bisiesto que apareció por primera vez el  31 de marzo. [ 20 ]
  • En 2012, el historial de chats de Gmail  mostraba la fecha del 31 de diciembre de 1969 para todos los chats guardados el 29 de febrero .
  • En 2012, Microsoft Azure quedó fuera de servicio debido a un error relacionado con el año bisiesto el  28 de febrero, lo que provocó que las máquinas virtuales fallaran al iniciarse. A las 17:45 (  hora del Pacífico), el equipo de Windows Azure se percató del problema, que finalmente se descubrió que era causado por una operación de "un año a partir de ahora" que implicaba cambiar el año sin cambiar el día. [ 21 ]
  • En 2016, un fallo en el sistema de cintas transportadoras de equipaje del aeropuerto de Düsseldorf , ocurrido el 29 de febrero,  provocó que más de 1200 maletas perdieran sus vuelos. [ 22 ]
  • En 2024, un fallo en las máquinas de autopago debido al año bisiesto provocó que las estaciones de servicio con pago en el surtidor en Nueva Zelanda quedaran fuera de servicio durante más de 10 horas. [ 23 ]

Para obtener listas más detalladas de errores de año bisiesto en los años 2016, [ 24 ] 2020, [ 25 ] y 2024, [ 26 ] consulte el sitio web Code of Matt .

Véase también

Referencias

  1. Johnson-Pint, Matt. "¿Cuáles son algunos ejemplos de errores de año bisiesto?" . Stack Overflow . Consultado el 5 de febrero de 2020 .
  2. Johnson-Pint, Matt. "Python - Reemplazando el año" . Stack Overflow . Consultado el 29 de febrero de 2020 .
  3. Johnson-Pint, Matt. "Manipulación de la estructura SYSTEMTIME en Win32/C++" . Stack Overflow . Consultado el 5 de febrero de 2020 .
  4. Johnson-Pint, Matt. ".NET / C# - Construcción a partir de partes de fecha" . Stack Overflow . Consultado el 5 de febrero de 2020 .
  5. Johnson-Pint, Matt. "JavaScript - Agregar año(s)" . Stack Overflow . Consultado el 5 de febrero de 2020 .
  6. Johnson-Pint, Matt. "Cómo determinar si un año es bisiesto" . Stack Overflow . Consultado el 5 de febrero de 2020 .
  7. Excel asume erróneamente que el año 1900 es bisiesto . Consultado el 1 de mayo de 2019.
  8. Formatos de archivo XML estándar ECMA-376 / Open Office . Consultado el 10 de septiembre de 2016.
  9. ISO/IEC 29500 / Formatos de archivo XML de Open Office . Consultado el 10 de septiembre de 2016.
  10. Towler, Jim (7 de enero de 1997). "Un error de software en año bisiesto provoca un fallo millonario"." . The RISKS Digest . 18 (74). Comité de ACM sobre Computadoras y Políticas Públicas . Recuperado el 5 de febrero de 2020 .
  11. "La última mordedura del virus" . BBC News . 5 de enero de 2001.
  12. "Los sistemas de 7-Eleven se ven afectados por un fallo similar al del efecto 2000" . Consultado el 10 de marzo de 2023 .
  13. "El error Y2K afecta al ferrocarril noruego a finales de año" . 1 de enero de 2001. Consultado el 10 de marzo de 2023 .
  14. "Inicio - Microsoft Answers" . Forums.zune.net. Archivado del original el 30 de agosto de 2009. Consultado el 27 de julio de 2011 .
  15. John Herrman (31 de diciembre de 2008). "Los Zunes de 30 GB fallan por todas partes, todos a la vez" . Gizmodo.com. Archivado del original el 12 de agosto de 2011. Consultado el 27 de julio de 2011 .
  16. Geere, Duncan (31 de diciembre de 2008). "ÚLTIMA HORA: Zunes en todo el mundo afectados por una misteriosa caída : Tech Digest" . Techdigest.tv . Recuperado el 27 de julio de 2011 . 
  17. "Preguntas frecuentes sobre Zune 30" . Microsoft . 31 de diciembre de 2008. Archivado del original el 2 de enero de 2009. Consultado el 1 de enero de 2009 .
  18. Zadegan, Bryant (3 de enero de 2009). "Una lección sobre bucles infinitos" . AeroXperience . Consultado el 5 de enero de 2009 .
  19. "Sony corrige el error del año bisiesto de la PS3" . Metro . 2 de marzo de 2010. Consultado el 10 de octubre de 2019 .
  20. "Los dispositivos de navegación GPS TomTom se ven afectados por un 'error del año bisiesto' en el GPS"" . BBC News . 3 de abril de 2012 . Consultado el 5 de febrero de 2020 .
  21. "Resumen de la interrupción del servicio de Windows Azure el 29 de febrero de 2012" . azure.microsoft.com . 9 de marzo de 2012. Consultado el 23 de enero de 2025 .
  22. "Un problema en el aeropuerto deja a cientos de pasajeros sin pantalones" . The Local (de) . Marzo de 2016. Consultado el 5 de febrero de 2020 .
  23. "Las gasolineras vuelven a estar operativas tras una interrupción de un día atribuida a un fallo técnico del año bisiesto" . The New Zealand Herald . 1 de marzo de 2024. Consultado el 29 de febrero de 2024 .
  24. Johnson-Pint, Matt (29 de febrero de 2016). "Lista de errores del día bisiesto de 2016" . Código de Matt . Recuperado el 5 de febrero de 2020 .
  25. Johnson-Pint, Matt (29 de febrero de 2020). "Lista de errores del día bisiesto de 2020" . Código de Matt . Recuperado el 9 de marzo de 2020 .
  26. "Lista de errores del día bisiesto de 2024" . Código de Matt . 29 de febrero de 2024. Consultado el 29 de febrero de 2024 .