stringtranslate.com

Проблема високосного года

Проблема високосного года (также известная как ошибка високосного года или ошибка високосного дня ) — это проблема как цифровой (компьютерной), так и нецифровой документации и хранения данных, которая возникает из-за ошибок в расчетах того, какие годы являются високосными , или из-за манипулирования датами без учета разницы между високосными и обычными годами.

Категории

Ошибки високосного года обычно делятся на две категории в зависимости от степени их влияния на реальное использование: [1]

  1. Те, которые приводят к ошибочным состояниям, таким как исключения, коды возврата ошибок, неинициализированные переменные или бесконечные циклы.
  2. Те, которые приводят к неверным данным, например, к ошибкам с точностью до единицы в запросах по диапазону или агрегации.

Примеры

Питон

Следующий код Python является примером ошибки категории 1 високосного года. Он будет работать правильно, пока todayне станет 29 февраля. Затем он попытается создать 29 февраля обычного года, которого не существует. dateКонструктор вызовет ValueErrorс сообщением «день находится вне диапазона для месяца». [2]

из  datetime  импорт  дата сегодня  =  дата . сегодня () позже  =  сегодня . заменить ( год  =  сегодня . год  +  1 )

Windows C++

Следующий код Windows C++ является примером ошибки категории 1 високосного года. Он будет работать правильно, пока текущая дата не станет 29 февраля високосного года. Затем он изменится, stчтобы представлять 29 февраля обычного года, дату, которая на самом деле не существует. Передача stв любую функцию, которая принимает SYSTEMTIMEструктуру в качестве параметра, скорее всего, не удастся.

Например, SystemTimeToFileTimeвызов, показанный здесь, вернет код ошибки. Поскольку это возвращаемое значение не проверено (что случается крайне часто), это приведет к тому, что ftоно останется неинициализированным. [3]

SYSTEMTIME st ; FILETIME ft ;  GetSystemTime ( & st ) ; st.wYear ++ ;SystemTimeToFileTime ( & st , & ft ); 

Microsoft C#

Следующий код .NET C# является примером ошибки категории 1 високосного года. Он будет работать правильно, пока dtне станет 29 февраля. Затем он попытается создать 29 февраля обычного года, которого не существует. DateTimeКонструктор выдаст ArgumentOutOfRangeException. [4]

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

JavaScript

Следующий код JavaScript является примером ошибки високосного года категории 2. Он будет работать правильно, пока не dtнаступит 29 февраля, например, 2020-02-29. Затем он попытается установить год на 2021. Поскольку 2021-02-29 не существует, объект Dateперейдет к следующей допустимой дате, которая является 2021-03-01. [5]

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

Плохой алгоритм високосного года (многие языки)

Следующий код является примером ошибки високосного года, которая наблюдается во многих языках. Он может вызвать влияние категории 1 или категории 2, в зависимости от того, для чего используется результат. Он неправильно предполагает, что високосный год происходит ровно каждые четыре года. [6]

bool isLeapYear = год % 4 == 0 ;       

Правильный алгоритм високосного года объясняется в разделе Алгоритм високосного года .

Происшествия

Смотрите также

Ссылки

  1. ^ Джонсон-Пинт, Мэтт. «Каковы примеры ошибок високосного года?». Stack Overflow . Получено 5 февраля 2020 г.
  2. ^ Джонсон-Пинт, Мэтт. "Python - Замена года". Stack Overflow . Получено 29 февраля 2020 г. .
  3. ^ Джонсон-Пинт, Мэтт. "Win32 / C++ SYSTEMTIME struct Manipulation". Stack Overflow . Получено 5 февраля 2020 г. .
  4. ^ Джонсон-Пинт, Мэтт. ".NET / C# - Строительство из частей даты". Stack Overflow . Получено 5 февраля 2020 г. .
  5. ^ Джонсон-Пинт, Мэтт. "JavaScript - Добавление года(ов)". Stack Overflow . Получено 5 февраля 2020 г. .
  6. ^ Джонсон-Пинт, Мэтт. «Определение високосного года». Stack Overflow . Получено 5 февраля 2020 г. .
  7. ^ Excel ошибочно предполагает, что 1900 год — високосный. Получено 01.05.2019.
  8. ^ Стандарт ECMA-376 / Форматы файлов Open Office XML. Получено 10 сентября 2016 г.
  9. ^ Форматы файлов XML ISO/IEC 29500 / Open Office. Получено 10 сентября 2016 г.
  10. ^ Тоулер, Джим (7 января 1997 г.). «Ошибка в программном обеспечении Leap-Year дает «сбой на миллион долларов»». The RISKS Digest . 18 (74). Комитет ACM по компьютерам и государственной политике . Получено 5 февраля 2020 г.
  11. ^ "Последний укус жука". BBC News . 5 января 2001 г.
  12. ^ "7-Eleven Systems Hit by Y2k-like Glitch" . Получено 10 марта 2023 г. .
  13. ^ "Y2K Bug Hits Norway's Railroad At End Of Year". 1 января 2001 г. Получено 10 марта 2023 г.
  14. ^ "Главная - Microsoft Answers". Forums.zune.net. Архивировано из оригинала 30 августа 2009 г. Получено 27 июля 2011 г.
  15. ^ Джон Херрман (2008-12-31). "30-гигабайтные Zune выходят из строя везде и сразу". Gizmodo.com . Получено 2011-07-27 .
  16. ^ Geere, Duncan (31 декабря 2008 г.). "СРОЧНО: Zunes во всем мире пострадали от загадочного сбоя : Tech Digest". Techdigest.tv . Получено 27 июля 2011 г.
  17. ^ "Zune 30 FAQ". Microsoft . 31 декабря 2008 г. Архивировано из оригинала 2 января 2009 г. Получено 1 января 2009 г.
  18. ^ Задеган, Брайант (3 января 2009 г.). "Урок бесконечных циклов". AeroXperience . Получено 5 января 2009 г.
  19. ^ "Sony исправляет ошибку високосного года на PS3". Metro . 2 марта 2010 г. Получено 10 октября 2019 г.
  20. ^ "Устройства спутниковой навигации TomTom пострадали от ошибки GPS "високосного года"". BBC News . 3 апреля 2012 г. Получено 5 февраля 2020 г.
  21. ^ Джонсон-Пинт, Мэтт (29 февраля 2016 г.). «Список ошибок високосного дня 2016 года». Кодекс Мэтта . Получено 5 февраля 2020 г.
  22. ^ "Сбой в аэропорту оставил сотни пассажиров без штанов". The Local (de) . Март 2016. Получено 5 февраля 2020 .
  23. ^ Джонсон-Пинт, Мэтт (29 февраля 2020 г.). «Список ошибок високосного дня 2020 года». Кодекс Мэтта . Получено 9 марта 2020 г.
  24. ^ "Список ошибок високосного дня 2024 года". Кодекс Мэтта . 2024-02-29 . Получено 2024-02-29 .
  25. ^ "Бензиновые колонки снова заработали после однодневного простоя, вызванного сбоем високосного года". NZ Herald . 2024-03-01 . Получено 2024-02-29 .