stringtranslate.com

Ошибки форматирования и хранения времени

В информатике ограничения типов данных и программные ошибки могут вызывать ошибки в вычислении или отображении времени и даты . Чаще всего это проявления арифметического переполнения , но также могут быть результатом других проблем. Наиболее известным последствием этого типа является проблема Y2K , но существует много других важных дат или времен, которые вызывали или будут вызывать проблемы в зависимости от различных недостатков программирования.

Год 1975

4 января 1975 года 12-битное поле, которое использовалось для дат в операционных системах DECsystem-10, переполнилось. Было много проблем и сбоев, связанных с этой ошибкой, пока разрабатывался альтернативный формат. [1]

Год 1978

Операционная система Digital Equipment Corporation OS/8 для компьютера PDP-8 использовала только три бита для обозначения года, что соответствовало годам с 1970 по 1977. [2]

Это было признано при разработке операционной системы COS-310 , и даты стали записываться по-другому. [3]

Год 1993

Несколько игр Sierra Entertainment, выпущенных для Classic Mac OS, начали зависать при запуске 18 сентября 1993 года. Проблема в версии Creative Interpreter (Mac SCI) для Mac приводила к «зависанию» игры при попытке обработать задержку из-за проблемы, связанной с переполнением. Mac SCI пытался использовать дату, чтобы определить, как долго должна длиться задержка, получая текущее время в секундах с 1 января 1904 года, эпохи Macintosh, и делил на 12 часов. Деление обрабатывалось Motorola 68000 и не происходило, если из-за деления обнаруживалось переполнение, но Mac SCI продолжал работать независимо, как если бы деление произошло, в конечном итоге приводя к тому, что задержка в одну секунду рассматривалась как задержка в 18 часов и так далее. Sierra выпустила патч под названием MCDATE, который решил проблему почти на 14 лет. [4] [5]

Год 1997

Часы домена /ОС , основанные на количестве 4-микросекундных единиц, появившихся с 1 января 1980 года, превысили 47 бит 2 ноября 1997 года, сделав неиспользуемые системы непригодными для использования. [6]

Год 1999

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

Первое обновление GPS

Даты GPS выражаются как номер недели и номер дня недели, причем номер недели передается как десятибитное значение . Это означает, что каждые 1024 недели (около 19,6 лет) после воскресенья 6 января 1980 года ( эпоха GPS ) дата снова сбрасывается на эту дату; это произошло в первый раз в 23:59:47 21 августа 1999 года [7] , во второй раз в 23:59:42 UTC 6 апреля 2019 года и повторится 20 ноября 2038 года. [8] Чтобы решить эту проблему, модернизированные навигационные сообщения GPS используют 13-битное поле, которое повторяется только каждые 8 ​​192 недели (157 лет) и не вернется к нулю до 2137 года. [9]

9/9/99

Многие устаревшие программы или наборы данных использовали "9/9/99" как мошенническое значение для указания неразрешенной даты или как терминатор для указания отсутствия дальнейших данных в наборе. Это приводило к сбою многих систем при достижении фактической даты, которую это представляет, 9 сентября 1999 года. [7]

2000 год

Двузначное обозначение года

Последующие проблемы, вызванные определенными временными исправлениями проблемы Y2K, будут возникать в различные моменты в 21 веке. Некоторые программы были сделаны совместимыми с Y2K, продолжая использовать двухзначные годы, но выбирая произвольный год, до которого эти годы интерпретируются как 20 xx , а после которого интерпретируются как 19 xx . [10]

Например, программа могла быть изменена таким образом, что она обрабатывает двузначные значения года 00–68 как относящиеся к периоду с 2000 по 2068 год, а значения 69–99 как относящиеся к периоду с 1969 по 1999 год. [11] Такая программа не сможет правильно обрабатывать годы после 2068 года.

Для приложений, требующих вычисления года рождения (или другого прошедшего года), такой алгоритм уже давно используется для решения проблемы 1900 года , но он не распознает людей старше 100 лет .

Год 2001

Системы, которые использовали строку из девяти цифр для записи времени в секундах с эпохи Unix, имели проблемы с отчетом о времени за пределами одной миллиардной секунды после эпохи 9 сентября 2001 года в 01:46:40 («биллениум»). Проблемы не были широко распространены. [12]

Год 2007

Игры Sierra Entertainment для Classic Mac OS, которые были пропатчены программой MCDATE или выпущены позже со встроенным патчем, начали зависать 28 мая 2007 года. Как и в случае с проблемой 1993 года, это было связано с проблемой в Mac SCI при попытке использовать дату для определения длительности задержки. Программы с патчем MCDATE зависают, потому что Mac SCI берет текущее количество секунд с эпохи Macintosh 1 января 1904 года, вычитает из этого 432 000 000 секунд, а затем делит на 12 часов через Motorola 68000, чтобы затем определить длительности задержки. 28 мая 2007 года Motorola 68000 снова не делит из-за защиты от переполнения, которую Mac SCI игнорирует. [4]

Год 2010

В некоторых системах возникли проблемы после перехода на 2010 год. Некоторые СМИ окрестили это проблемой «Y2K+10» или «Y2.01k». [13]

Основным источником проблем была путаница между шестнадцатеричным кодированием чисел и кодированием чисел в формате BCD . Числа от 0 до 9 кодируются как в шестнадцатеричном, так и в формате BCD как 00 16 по 09 16 . Но десятичное число 10 кодируется в шестнадцатеричном как 0A 16 и в формате BCD как 10 16 . Таким образом, BCD 10 16 , интерпретированное как шестнадцатеричное кодирование, ошибочно представляет десятичное число 16.

Например, протокол SMS использует кодировку BCD для дат, поэтому некоторые программы для мобильных телефонов неправильно сообщали даты сообщений как 2016 год вместо 2010 года. Windows Mobile была первой программой, которая, как сообщалось, была затронута этим сбоем; в некоторых случаях WM6 изменяла дату любого входящего SMS-сообщения, отправленного после 1 января 2010 года, с 2010 года на 2016 год. [14] [15]

Другие затронутые системы включают терминалы EFTPOS [16] и PlayStation 3 (за исключением модели Slim). [17]

PlayStation 3 от Sony неправильно обработала 2010 год как високосный , поэтому несуществующее 29 февраля 2010 года было показано 1 марта 2010 года, что вызвало ошибку программы . [18]

Самый крупный сбой такого рода произошел в Германии, где более 20 миллионов банковских карт стали непригодными для использования, а также в Citibank Belgium, где перестали работать чипы идентификации клиентов Digipass. [19]

Год 2011

Тайвань официально использует календарь Минго , в котором григорианский год 1912 считается первым годом. Таким образом, григорианский год 2011 является 100-м годом Китайской Республики, его первым трехзначным годом. [20]

2013 год

Космический зонд Deep Impact потерял связь с Землей 11 августа 2013 года из-за проблемы с отметкой времени; дата хранилась как беззнаковое 32-битное целое число, подсчитывающее количество десятых долей секунды с 1 января 2000 года. [21]

2019 год

Второе включение GPS

В 2019 году произошел второй перенос номера недели GPS .

Переход на японский календарь

30 апреля 2019 года император Японии Акихито отрекся от престола в пользу своего сына Нарухито . Поскольку годы в Японии традиционно обозначаются названиями эпох , соответствующими правлению каждого императора, это привело к появлению нового названия эпохи, Рэйва (令和) , после восшествия Нарухито на престол на следующий день. Поскольку предыдущий император Хирохито умер 7 января 1989 года, а правление Акихито в основном совпало с ростом использования компьютеров, большая часть программного обеспечения не была протестирована на предмет корректного поведения при смене эпохи, в то время как тестирование было еще более осложнено тем фактом, что новое название эпохи не было раскрыто до 1 апреля 2019 года. Поэтому ожидались ошибки от программного обеспечения, которое не предвидело новую эпоху.

2020 год

Видеоигры WWE 2K20 и Star Wars Jedi: Fallen Order вылетели 1 января 2020 года, когда год перешел на новый. Сбои можно было обойти, только сбросив год на 2019, пока не выйдет патч. [22] [ 23] Кроме того, Crystal Reports 8.5 не сможет генерировать определенные отчеты, начиная с 2020 года. [24]

Паркоматы Parkeon в Нью-Йорке и других местах не могли принимать кредитные карты в качестве формы оплаты с 2020 года. Был реализован обходной путь, но требовалось индивидуальное обновление каждого счетчика. В Нью-Йорке счетчики не должны были быть отремонтированы до 9 января. [25] [26]

В Польше 5000 кассовых аппаратов перестали правильно печатать дату. [27]

Умные спортивные часы Suunto отображали ошибку при вычислении дней недели, которые были представлены с шагом +2 (например, FRI вместо WED, SAT вместо THU). Для часов модели Suunto Spartan ошибка была исправлена ​​в версии прошивки 2.8.32. [28]

Классическая Mac OS

Панель управления в Classic Mac OS версий 6, 7 и 8 позволяет устанавливать дату только до 31 декабря 2019 года, хотя система может продолжать переводить время и после этой даты. [29] [30]

Расписание Microsoft+

Первая версия Microsoft Schedule+, поставляемая в комплекте с версией 3.0 почтового клиента Microsoft Mail, откажется работать с годами после 2020 года и позже, поскольку программа была разработана для работы в 100-летнем временном окне с 1920 по 2019 год. В результате дата может быть установлена ​​только до 31 декабря 2019 года. [31]

2021 год

Пользователи Samsung сообщили, что телефоны, работающие на последнем обновлении One UI 3.0 или Android 11, потеряли доступ к статистике аккумулятора и зарядки, начиная с 2021 года. Затронутые устройства не будут сообщать статистику использования, поэтому эти разделы останутся пустыми. [32] [33]

2022 год

Даты, хранящиеся в формате ггммддЧЧММ, преобразованные в 32-разрядное целое число со знаком, переполнились 1 января 2022 года, так как 2 31 = 2147483648. Особенно пострадали номера обновлений компонента сканирования вредоносных программ Microsoft Exchange , которые, по-видимому, используются для математической проверки для определения последнего обновления. [34] [35]

Автомобили Honda и Acura , выпущенные в период с 2004 по 2012 год, оснащенные системами навигации GPS, неправильно отображали год 2002. Эта проблема была вызвана переполнением эпохи GPS. [36] [37] Проблема была устранена 17 августа 2022 года . [38]

2024 год

Считыватели платежных карт на бензоколонках в Новой Зеландии не смогли справиться с високосным годом и не смогли правильно выдавать бензин. [39]

Видеоигры EA Sports WRC и Theatrhythm Final Bar Line также столкнулись с проблемами, связанными с високосным годом: первая вылетала при попытке загрузить игру, а вторая утверждала, что данные сохранения были повреждены. Для корректной работы обе игры пришлось установить на следующий день — 1 марта 2024 года. [40] [41] [42]

2025 год

В Японии некоторые старые компьютерные системы, использующие японский календарь, которые не были обновлены, все еще считают годы по эре Сёва . 2025 год соответствует в этих системах Сёва 100, что может вызвать проблемы, если программное обеспечение предполагает две цифры для года. [43]

2028 год

Некоторые системы хранят свой год как однобайтовое смещение от 1900, что дает диапазон 255 (8 бит) и позволяет безопасно представлять даты до 2155 года. Однако не все системы используют беззнаковый байт: некоторые были ошибочно закодированы с помощью знакового байта, который допускает только диапазон 127 лет, что означает, что поле даты в программном обеспечении будет неверным после 2027 года и может вызвать непредсказуемое поведение. Это влияет на несколько частей программного обеспечения оптических дисков, которые работают с использованием формата ISO 9660. [44]

В конце 1970-х годов в системах Data General Nova и Eclipse корпорация World Computer Corporation (выполняющая заявки кредитных союзов) создала формат даты с 16-битным полем даты для 128 лет (7 бит – обратите внимание, 1900+128=2028), 12 месяцев (4 бита) и 31 дня (5 бит). Это позволило напрямую сравнивать даты с помощью беззнаковых функций. Некоторые системы, включая HP 3000 , до сих пор используют этот формат, хотя внешние консультанты разработали патч. [45]

2032 год

Palm OS использует как целые числа со знаком с эпохой 1970 года , так и целые числа без знака с эпохой 1904 года для различных системных функций, [46] таких как системные часы и даты файлов (см. формат PDB ). Хотя это должно привести к тому, что Palm OS будет подвержена проблеме 2038 года, Palm OS также использует 7-битное поле для хранения значения года с другим отсчетом эпох с 1904 года, что приводит к максимальному году 2031 (1904 + 127). [47]

2036 год

В сетевом протоколе времени есть проблема переполнения, связанная с проблемой 2038 года , которая проявляется в 06:28:16 UTC 7 февраля 2036 года, а не в 2038 году. 64-битные временные метки, используемые NTP, состоят из 32-битной части для секунд и 32-битной части для дробной секунды, что дает NTP шкалу времени, которая переворачивается каждые 2,32 секунды (136 лет) и теоретическое разрешение 2−32 секунды (233 пикосекунды). NTP использует эпоху 1 января 1900 года. Первое переворачивание происходит в 2036 году, до проблемы 2038 года в UNIX. [48] [49]

2038 год

Перевод времени Unix

Первоначальная реализация операционной системы Unix хранила системное время как 32-битное целое число со знаком, представляющее количество секунд после эпохи Unix (1 января 1970 г., 00:00:00 UTC). Это значение будет перенесено после 19 января 2038 г., 03:14:07 UTC. Эта проблема была решена в большинстве современных операционных систем Unix и Unix-подобных операционных систем путем хранения системного времени как 64-битного целого числа со знаком, хотя отдельные приложения, протоколы и форматы файлов также должны быть изменены.

Библиотека времени выполнения Windows C

Подобно проблеме с переводом времени в Unix, 32-разрядная версия gmtime в библиотеках времени выполнения C в Windows имеет похожую проблему. [50]

Эта проблема уже проявилась в Oracle Access Manager версии 10.1.4.3 для Windows. Компонент Identity Console устанавливает файл cookie, содержащий настройки пользовательского интерфейса , со сроком действия 500 000 000 секунд в будущем (около 16 лет). Это происходит после 19 января 2038 года, поэтому он выдает исключение для определенных поисковых действий после 02:20:48 UTC 17 марта 2022 года, поскольку вызов gmtime_r() не может преобразовать предоставленное число в дату для записи в файл cookie. [51] Несмотря на возраст программного обеспечения (18 июня 2009 года), Oracle выпустила исправление под номером 33983548 6 апреля 2022 года.

Третий сброс GPS

Третий переход на новую GPS-неделю произойдет 20 ноября 2038 года в 23:59:37 UTC.

2040 год

Ранние компьютеры Apple Macintosh хранят время в своих часах реального времени (RTC) и файловых системах HFS как беззнаковое 32-битное число секунд с 00:00:00 1 января 1904 года. После 06:28:15 6 февраля 2040 года (т. е. 2 32 −1 секунды от начала эпохи) это время вернется к 1904 году: [52] кроме того, HFS+ , формат по умолчанию для всех последних компьютеров Apple Macintosh, также затронут. Заменяющая файловая система Apple решает эту проблему.

ProDOS для компьютеров Apple II поддерживает только двузначные номера года. Чтобы избежать проблем Y2K, Apple выпустила техническую записку, в которой говорилось, что номер года должен представлять 1940–2039. [53] Программное обеспечение для платформы может неправильно отображать даты, начинающиеся с 2040 года, хотя сторонние компании прилагают усилия по обновлению ProDOS и прикладного программного обеспечения для поддержки лет до 4095. [54]

2042 год

18 сентября 2042 года часы времени суток (TODC) на мэйнфрейме IBM S/370 и его преемниках, включая текущую zSeries, будут переведены. [55]

Более старые TODC были реализованы как 64-битный счетчик единиц 2 −12 микросекунд (0,244 нс), а стандартной базой было 1 января 1900 года, UT . В июле 1999 года были анонсированы расширенные часы TODC, которые расширили часы вправо (то есть расширенные биты менее значимы, чем исходные биты). Фактическое разрешение зависит от модели, но формат является согласованным и, следовательно, будет переходить через 2 52 микросекунды. [55]

Значение TODC доступно программам пользовательского режима и часто используется для хронометража и генерации уникальных идентификаторов событий.

Хотя IBM определила и реализовала на последних машинах более длинный (128-битный) аппаратный формат, который расширяет таймер с обеих сторон как минимум на 8 дополнительных бит, многие программы продолжают полагаться на 64-битный формат, который остается доступным подмножеством более длинного таймера.

2048 год

Логика планирования мощностей в системе ERP SAP S/4HANA поддерживает только даты окончания до 19 января 2048 года (24 855 дней с 1 января 1980 года). Это касается, например, планирования производства, технического обслуживания и инспекций. [56]

2069 год

Согласно Единой спецификации UNIX для анализа двузначных годов с использованием strptime(), «значения в диапазоне [69,99] должны относиться к годам с 1969 по 1999 включительно, а значения в диапазоне [00,68] должны относиться к годам с 2000 по 2068 включительно» [57] , что означает, что при анализе с помощью strptime(), двузначный год «69» будет интерпретироваться как 1969, а не как 2069.

2079 год

Дни 32,768 и 65,536

Программы, которые хранят даты как количество дней с произвольной даты (или эпохи ), уязвимы к эффектам переполнения или переноса, если значения недостаточно широки, чтобы позволить значениям даты охватывать достаточно большой временной диапазон, ожидаемый для приложения. Знаковые 16-битные двоичные значения переходят через 32 768 (2 15 ) дней с даты эпохи, производя отрицательные значения. Некоторые мэйнфреймовые системы испытывали программные сбои, поскольку они кодировали даты как количество дней с 1 января 1900 года, что производило неожиданные отрицательные числа дней на дату переполнения 18 сентября 1989 года. Аналогично, беззнаковые 16-битные двоичные числа дней переполняются через 65 536 (2 16 ) дней, которые усекаются до нулевых значений. Для программного обеспечения, использующего эпоху 1 января 1900 года, это произойдет 6 июня 2079 года. [58]

2080 год

Некоторые (если не все) телефоны Nokia, работающие на Series 40 (например, Nokia X2-00 ), поддерживают только даты до 31 декабря 2079 года и, таким образом, не смогут отображать даты после этой даты. Одним из обходных путей является использование года 1996, 2024 или 2052 вместо 2080 (как совместимые високосные годы) для отображения правильного дня недели, даты и месяца на главном экране. [ необходима цитата ]

Системы, хранящие год только в виде двузначного значения 00..99, как и многие RTC, могут перейти с 31 декабря 2079 года на эпоху IBM PC и DOS 1980-01-01 .

2100 год

API и функции преобразования даты файлов DOS и Windows (например, INT 21h /AH=2Ah) официально поддерживают даты только до 31 декабря 2099 года (хотя базовая файловая система FAT теоретически поддерживает даты до 2107 года). Следовательно, операционные системы на базе DOS, а также приложения, преобразующие другие форматы в формат FAT/DOS, могут демонстрировать неожиданное поведение, начиная с 1 января 2100 года.

Аналогично, Nintendo DS и GameCube, а также Sony PlayStation 4 позволяют пользователям устанавливать даты только до 2099 года. В случае с Nintendo DS система не будет переводить время дальше 31 декабря 2099 года, тогда как GameCube и PS4 по-прежнему будут переводить его на 2100 год и далее, хотя пользователи этих игровых консолей не могут вручную вводить дату и время до такого отдаленного периода.

2100 не являетсявисокосный год

Другая проблема возникнет в конце 28 февраля 2100 года, поскольку 2100 год не является високосным . Поскольку многие распространенные реализации алгоритма високосного года неполны или упрощены, они могут ошибочно предположить, что 2100 год является високосным, в результате чего дата перейдет с 28 февраля 2100 года на 29 февраля 2100 года вместо 1 марта 2100 года.

2106 год

Многие существующие форматы файлов, протоколы связи и интерфейсы приложений используют вариант формата даты Unix time_t , сохраняя количество секунд с начала эпохи Unix (полночь UTC, 1 января 1970 года) в виде беззнакового 32-битного двоичного целого числа. Это значение перейдет 7 февраля 2106 года в 06:28:15 UTC. То есть в настоящее время количество секунд с 1 января 1970 года составляет FFFF FFFF в шестнадцатеричном формате.

Эта проблема представления хранилища не зависит от программ, которые внутри себя хранят и обрабатывают системное время как 64-битные целочисленные значения со знаком.

2108 год

Метки даты и времени, хранящиеся в файловых системах FAT , первоначально представленных в 86-DOS 0.42 в 1981 году и перенесенных в MS-DOS , PC DOS , DR-DOS и т. д., переполнятся в конце 31 декабря 2107 года. Метка даты последнего изменения (а с DELWATCH 2.0+ также метка даты удаления файла , а с DOS 7.0+ опционально также метка даты последнего доступа и метка даты создания ) хранятся в записи каталога с годом, представленным в виде беззнакового семибитного числа (0–127) относительно 1980 года, и, таким образом, не могут указывать на какие-либо даты в 2108 году и позже. Функции API , определенные для извлечения этих дат, официально поддерживают только даты до 31 декабря 2099 года.

Это также повлияет на формат файла архива ZIP , поскольку он использует внутренние метки времени модификации файлов FAT.

2137 год

Даты GPS выражаются как номер недели и номер дня недели, причем номер недели изначально использует десятибитное значение , а модернизированные навигационные сообщения GPS используют 13-битное поле. Десятибитные системы будут обновляться каждые 1024 недели (около 19,6 лет) после воскресенья 6 января 1980 года ( эпоха GPS ), а 13-битные системы обновляются каждые 8192 недели. Тринадцатибитные системы обнулятся в 2137 году. [7] [8]

Год 2248

RISC OS хранит даты в сотых долях секунды с 1 января 1900 года в пяти байтах – 40 бит. Эти временные метки используются внутри и отображаются в метаданных файла (адреса загрузки и выполнения). Эта эпоха заканчивается 3 июня 2248 года в 06:57:57.75 UTC. [59]

Год 2262

Некоторые системы хронометража считают наносекунды с 1970 года, используя 64-битное целое число со знаком, которое переполнится 11 апреля 2262 года, 23:47:16. API языка программирования Go UnixNano является одним из примеров. [60] Другие примеры включают объект Timestamp в Python pandas , [61] C++ chrono::nanoseconds, [62] и таймеры QEMU . [63]

Год 2286

Системы, использующие строку длиной 10 символов для записи времени Unix, могут испытывать проблемы с сообщением времени после 20 ноября 2286 года, 17:46:39, через десять миллиардов секунд после эпохи Unix.

Год 2446

В ext4 , файловой системе по умолчанию для многих дистрибутивов Linux, нижние два бита {a,c,m}time_extraиспользуются для расширения {a,c,m}timeполей, откладывая проблему 2038 года до 2446 года. [64] В этом «дополнительном» 32-битном поле нижние два бита используются для расширения 32-битного поля секунд до ширины 34 бита; верхние 30 бит используются для обеспечения точности временной метки в наносекундах. Таким образом, временные метки не должны переполняться до мая 2446 года. [65]

Годы 4000, 8000 и т.д.

В масштабах времени в тысячи лет григорианский календарь отстает от астрономических сезонов. Это происходит потому, что скорость вращения Земли постепенно замедляется , что делает каждый день немного длиннее с течением времени (см. приливное ускорение и високосную секунду ), в то время как год сохраняет более равномерную продолжительность.

В 19 веке сэр Джон Гершель предложил модификацию григорианского календаря с 969 високосными днями каждые 4000 лет, вместо 970 високосных дней, которые григорианский календарь вставлял бы за тот же период. [66] Это сократило бы средний год до 365,24225 дней. Предложение Гершеля сделало бы год 4000 и кратные ему годы обычными, а не високосными. Хотя эта модификация часто предлагалась с тех пор, она никогда не была официально принята. [67]

В то время как большинство программ (включая Excel , JavaScript и R ) в настоящее время распознают 4000 и 8000 как високосные годы (так как они делятся на 400), SAS приняла «правило 4000 лет». Таким образом, с текущим программным обеспечением преобразования дат между SAS и другим программным обеспечением выйдут из синхронизации после 28 февраля 4000 года. [68] [69]

Год 4501

Microsoft Outlook использует дату 1 января 4501 года в качестве заполнителя для «нет» или «пусто». [70] [71]

10 000 год

Год 10 000 станет первым григорианским годом с пятью цифрами. Все будущие годы, которые являются степенями 10, а также даты до 10-го тысячелетия до н. э. , сталкиваются с аналогичными проблемами кодирования.

Примеры

Эту проблему можно увидеть в программе электронных таблиц Microsoft Excel по состоянию на 2023 год, которая хранит даты как количество дней с 31 декабря 1899 года (день 1 — это 1 января 1900 года) с вымышленным високосным днем ​​в 1900 году , если используется система дат по умолчанию 1900 года. В качестве альтернативы, если используется система дат 1904 года, дата хранится как количество дней с 1 января 1904 года (день 1 — это 2 января 1904 года), и проблемы високосного года не возникает. Максимальная поддерживаемая дата для расчета — 31 декабря 9999 года. [72] [73]

Год 30,828

В Windows FILETIMEструктура хранит число 100-наносекундных интервалов с 00:00:00.0000000 UTC 1 января 1601 года как знаковое 64-битное целое число. Это значение превысит максимально возможное значение в 02:48:05.4775808 UTC 14 сентября 30828 года, после чего Windows не будет принимать даты после этого дня и будет отображать ошибки «недопустимое системное время» в NTFS. [74]

Годы 32,768 и 65,536

Программы, обрабатывающие годы как 16-битные значения, могут столкнуться с проблемами при работе с годом 32 768 или 65 536, в зависимости от того, рассматривается ли значение как целое число со знаком или без знака.

Для задачи 32 768 года годы после 32 767 могут быть интерпретированы как отрицательные числа, начиная с −32 768. [75] Задача 65 536 года , скорее всего, проявится, если представить год 65 536 как год 0. [76]

Год 33,658

Архивы статической библиотеки, созданные командой ar Unix, хранят временные метки в виде строки ASCII, содержащей десятичное число секунд после эпохи Unix (1 января 1970 г., 00:00:00 UTC), с ограничением в 12 символов ASCII. Это значение будет обновлено после 1:46:39 27 сентября 33658 г.

100 000 год

100 000 год станет первым годом по григорианскому календарю с шестью цифрами.

Год 275,760

API дат JavaScript хранит даты в виде количества миллисекунд с 1 января 1970 года. Даты имеют диапазон ±100 000 000 дней от эпохи, что означает, что программы, написанные на JavaScript с использованием API дат, не могут хранить даты после 13 сентября 275 760 года нашей эры. [77]

Год 292,277,026,596

Задача 292,277,026,596 года ( приблизительно2,92 × 10 11 лет в будущем) произойдет, когда 64-битное время Unix переполнится после 15:30:08 UTC в воскресенье, 4 декабря 292 277 026 596 года нашей эры. [78] [79] Этот год находится настолько далеко в будущем (намного дальше вероятной продолжительности жизни Земли , Солнца , человечества и даже за пределами некоторых предсказаний продолжительности жизни Вселенной ), что на него в основном ссылаются как на предмет теоретического интереса, шутки или указания на то, что более ранние версии, такие как проблема 2038 года, не могут быть по-настоящему «решены» навсегда.

Относительное переполнение времени

Майкрософт

В Microsoft Windows 7, Windows Server 2003, Windows Server 2008 и Windows Vista информация о начале TCP-подключения хранилась в сотых долях секунды с использованием 32-битного беззнакового целого числа, что приводило к переполнению и сбою TCP-подключений через 497 дней. [80]

В Microsoft Windows 95 и Windows 98 возникала проблема с 2-32 - миллисекундным сбрасыванием в драйвере виртуального устройства (VTDAPI.VXD), что приводило к зависанию системы через 49,7 дней. [81]

В .NET до версии 6.0 была ошибка, из-за которой восхождение на вершину пула потоков периодически прекращалось через 49,7 дней из-за переполнения при обработке миллисекунд с момента запуска. [82]

Боинг

У самолета Boeing 787 было по крайней мере две проблемы с программным обеспечением, связанные с хранением времени. В 2015 году была зарегистрирована ошибка, при которой время хранилось в сотых долях секунды с использованием 32-битного целого числа со знаком, и система выходила из строя через 248 дней. [83]

В 2020 году FAA выпустило директиву по летной годности для решения проблемы, при которой, если самолет не будет полностью выключен до достижения 51 дня безотказной работы, системы начнут отображать вводящие в заблуждение данные. [84]

Ардуино

Платформа Arduino предоставляет относительное время через функцию millis(). Эта функция возвращает беззнаковое 32-битное значение для «миллисекунд с момента запуска», которое предназначено для обновления каждые 49,71 дня. По умолчанию это единственный источник синхронизации, доступный на платформе, и программы должны проявлять особую осторожность при обработке обновлений. [85] Внутри millis() основан на подсчете прерываний таймера. Определенные режимы энергосбережения отключают прерывания и, следовательно, останавливают движение счетчика во время сна. [86]

Проблемы исторического года

Также для исторических лет могут возникнуть проблемы с обработкой исторических событий, например:

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

Ссылки

  1. ^ Остейн, Роб (2 февраля 1987 г.). «ДАТА-86, или Призрак прошлого Tinkles». The RISKS Digest . 4 (45). Комитет ACM по компьютерам и государственной политике . Получено 29 декабря 2014 г.
  2. ^ "Каталог linctape-images/os8l/ps-8-system-25.linc". OS/8 может хранить даты только за 8-летний период...
  3. ^ "The Digital Equipment Corporation PDP-8: Часто задаваемые вопросы". COS-310, коммерческая операционная система DEC для PDP-8 ... файловая система почти такая же, как OS/8, но даты записываются по-другому
  4. ^ ab "News Notes". InterAction Magazine . Vol. VI, no. 3. Sierra Entertainment . 1993. p. 12.
  5. ^ "Sierra's Macintosh Timebomb". www.benshoof.org . Получено 9 марта 2023 г. .
  6. ^ «Последние новости о дате ошибки».
  7. ^ abc Janis L. Gogan (9 августа 1999). "Applications to the Nines". InformationWeek . Архивировано из оригинала 3 октября 2008. Получено 21 января 2008 .
  8. ^ ab "GPS week roll over April 6th". cyber.gov.au . Архивировано из оригинала 20 октября 2019 . Получено 10 июня 2019 .
  9. ^ "GPS Week Number Rollover - April 2019". GPS.gov . Национальное координационное бюро по космическому позиционированию, навигации и времени. 6 апреля 2019 г. Получено 25 февраля 2023 г.
  10. Роджер Дешнер (21 декабря 2001 г.). «Определение и исправление дат с двузначными годами». Иллинойсский университет в Чикаго. Архивировано из оригинала 15 февраля 2002 г. Получено 19 января 2010 г.См. «Пример 1: 100-летнее фиксированное окно, с 1973 по 2072 год»
  11. ^ дата – укажите дату и время, The Open Group Base Specifications Issue 6. IEEE Std 1003.1, издание 2004 г.
  12. ^ Манджу, Фархад. «Unix Tick Tocks to a Billion». Wired . Получено 29 марта 2022 г.
  13. ^ "Банк Квинсленда пострадал от сбоя "Y2.01k"". 4 января 2010 г. Получено 25 февраля 2023 г.
  14. ^ Фрид, Ина (5 января 2010 г.). «Windows Mobile glitch dates 2010 texts 2016». CNET . Получено 24 февраля 2023 г. .
  15. ^ "Windows Mobile phones hurt Y2K+10 bug". 4 января 2010 г. Архивировано из оригинала 23 октября 2013 г. Получено 3 июля 2013 г.
  16. ^ "Bank of Queensland vs Y2K – an update". 4 января 2010 г. Архивировано из оригинала 8 января 2010 г. Получено 3 июля 2013 г.
  17. Лофтус, Джек (28 февраля 2010 г.). «Ошибка: 8001050F выводит из строя PlayStation Network». Gizmodo .
  18. ^ Metrowebukmetro (2 марта 2010 г.). "Sony исправляет ошибку PS3 „високосный год“". Metro . Получено 25 октября 2022 г. .
  19. ^ "Bug de l'an 2010 en Allemagne: plus de 20 millions de cartes bancaires inutilisables" [Ошибка 2010 года в Германии: более 20 миллионов неиспользуемых банковских карт]. RTL Belgium (на французском). 5 января 2010 г. Получено 25 февраля 2023 г.
  20. ^ "Проблема Y1C Тайваня". Pinyin News . 2 января 2006 г.
  21. ^ "Миссия NASA's Deep Space Comet Hunter Mission Comes to an End". Jet Propulsion Laboratory. 20 сентября 2013 г. Архивировано из оригинала 14 октября 2013 г. Получено 9 июля 2022 г.
  22. ^ Мансур, Сакиб (1 января 2020 г.). «WWE 2K20 отказывается запускаться в 2020 году». SegmentNext . Получено 1 января 2020 г. .
  23. ^ "Star Wars Jedi: Fallen Order и WWE 2K20 не запускаются из-за ошибки "2020" [ОБНОВЛЕНИЕ]". DSOGaming . 1 января 2020 г. Получено 19 ноября 2020 г.
  24. ^ "sql – ODBC Connection / Crystal Reports". Stack Overflow . Получено 19 ноября 2020 г. .
  25. ^ «Парковочные счетчики по всему Нью-Йорку не принимают кредитные карты, они никогда не были запрограммированы на работу в 2020 году». 2 января 2020 г. Получено 19 ноября 2020 г.
  26. ^ "Y2K20 Parking Meter Software Glitch Causes Citywide SNAFU – Gothamist". Архивировано из оригинала 4 января 2020 года . Получено 4 января 2020 года .
  27. Паллус, Патрик (3 января 2020 г.). «Wielka awaria drukarek fiskalnych. Producent naprawia urządzenia, Firmy liczą straty». Business Insider (на польском языке) . Проверено 4 января 2020 г.
  28. ^ «Обновления программного обеспечения Suunto Spartan».
  29. ^ "Техническая записка TN1049 Приближение тысячелетия: Mac и 2000 год". Архивировано из оригинала 13 ноября 2014 года . Получено 20 января 2020 года .
  30. ^ "Исправления для винтажного Mac 2020" . Получено 21 января 2020 г. .
  31. ^ "Q192201: XCLN: Schedule + 1.0 не будет запущен после 31.12.2019". Архив KnowledgeBase . Получено 6 июля 2022 г.
  32. ^ Чон, Юджин (13 января 2021 г.). «Пользователи сообщают об интересном сбое в One UI 3.0 от Samsung, но его легко исправить». Phone Arena . Получено 9 марта 2023 г.
  33. ^ Бхардвадж, Девешвар (21 мая 2021 г.). "Samsung One UI 3.0/3.1 (Android 11) обновление баг-трекер [продолжение обновлено]". PiunikaWeb . Получено 9 марта 2023 г. .
  34. ^ Борн, Гюнтер (1 января 2022 г.). «Проблема с 2022 годом обмена: не удалось загрузить модуль сканирования FIP-FS – невозможно преобразовать «2201010001» в long (01.01.2022 00:00 UTC)». Технологии Борна и мир Windows . Получено 1 января 2022 г.
  35. ^ Мартин, Александр (2 января 2022 г.). «Помните ошибку Y2K? Microsoft подтверждает новую проблему Y2K22». Sky News .
  36. ^ «Часы Honda застряли на 20 лет в прошлом, и это не исправить». Jalopnik . 6 января 2022 г. Получено 8 января 2022 г.
  37. ^ "Из-за некачественного кодирования некоторые автомобили Honda застряли в 2002 году". Engadget . 7 января 2022 г. Получено 8 января 2022 г.
  38. ^ Акоба, Пауло (17 августа 2022 г.). «Владельцы Honda и Acura, у которых возникли проблемы с часами, сообщают, что по состоянию на 17 августа их время корректируется автоматически, но многие по-прежнему застревают с неправильной датой». Архивировано из оригинала 30 мая 2023 г.
  39. ^ «Сбой високосного года» привел к закрытию некоторых топливных заправок в Новой Зеландии Reuters
  40. ^ Игра Final Fantasy сломана из-за високосного дня Kotaku
  41. Theatrhythm Final Fantasy на Nintendo Switch не работает сегодня, 29 февраля, по-видимому, из-за високосного года IGN
  42. ^ EA Sports WRC терпит крах на старте сегодня, 29 февраля, потому что 2024 год — високосный IGN
  43. ^ «Большие технологические компании предупреждают о «японской ошибке тысячелетия» перед отречением Акихито». The Guardian . 25 июля 2018 г.
  44. ^ "Годы с 1900 года + семь бит = поломка в 2028 году". rachelbythebay.com .
  45. ^ «MPE/iX Release 7.5 Patch Revision 2028 – Beechglen Development Inc».
  46. ^ "Palm OS® Protein C/C++ Compiler Language & Library Reference" (PDF) . Получено 12 октября 2019 г. .
  47. ^ "subject:RE: Дата ограничена 2031 годом". mail-archive.com . Получено 12 октября 2019 г. .
  48. Дэвид Л. Миллс (12 мая 2012 г.). "Эра NTP и нумерация эр" . Получено 24 сентября 2016 г.
  49. ^ W. Richard Stevens; Bill Fenner; Andrew M. Rudoff (2004). Сетевое программирование UNIX. Addison-Wesley Professional. стр. 582–. ISBN 978-0-13-141155-5.
  50. ^ "gmtime, _gmtime32, _gmtime64". Microsoft . Получено 8 апреля 2022 г. .
  51. ^ "Oracle Access Manager". Сообщества Oracle . Корпорация Oracle. 24 марта 2022 г. Получено 25 февраля 2023 г.
  52. ^ Apple Computer, Inc., Внутри Macintosh , Том II, Эддисон Уэсли, 1985, стр. 369
  53. ^ "ProDOS Dates -- 2000 and Beyond". Apple, Inc. Получено 6 декабря 2019 г.
  54. ^ "ProDOS 2.5" . Получено 9 июня 2021 г.
  55. ^ ab Lascu, Octavian; Eckam, Hans-Peter; Kozakos, George; Pereira, Paulo Vitor (июнь 2013 г.), Server Time Protocol Planning Guide, IBM Redbooks (4-е изд.), IBM , стр. 19, ISBN 978-0738438108, получено 11 августа 2019 г.
  56. ^ «SAP-нота 2258792 (требуется доступ к порталу поддержки SAP)». 30 ноября 2018 г.
  57. ^ "strptime - The Open Group Base Specifications Issue 7, издание 2018 г." . Получено 4 марта 2023 г.
  58. ^ JR Stockton (12 апреля 2009 г.). «Критические и значимые даты». Архивировано из оригинала 7 сентября 2015 г. Получено 20 августа 2009 г.
  59. ^ https://www.riscosopen.org/wiki/Time_formatting_and_storage_bugs/documentation/show/OS_Word%2014_3 [ пустой URL-адрес ]
  60. ^ "пакет времени – время". pkg.go.dev .
  61. ^ «Временные ряды / Функциональность дат – документация pandas 1.3.4».
  62. ^ "std::chrono::duration". en.cppreference.com .
  63. ^ "Обновить версию для выпуска v5.0.0". Архивировано из оригинала 21 января 2021 г. Получено 19 июня 2021 г.
  64. ^ ext4: Исправлена ​​обработка расширенного tv_sec
  65. ^ Разметка диска Ext4: временные метки инодов
  66. ^ Гершель, Джон (1849). Очерки астрономии. стр. 629.
  67. ^ Стил, Дункан (2000). Отметка времени: Эпический квест по изобретению идеального календаря. John Wiley & Sons. стр. 185. ISBN 978-0-471-29827-4.
  68. Крис Хемедингер (5 апреля 2010 г.). «В году 9999...»
  69. ^ "Файлы базы данных Microsoft Access". Документация по программированию SAS 9.4 и SAS® Viya® 3.5 . Преобразование значений даты и времени между наборами данных SAS и базой данных Microsoft Access.
  70. ^ «Перечисление OlMarkInterval (Outlook)». 30 марта 2022 г.
  71. ^ «Фильтрация элементов с использованием ключевых слов запроса». 22 января 2022 г.
  72. ^ «Различия между системами дат 1900 и 1904 годов – Office». Microsoft . 5 мая 2022 г. . Получено 22 февраля 2023 г. .
  73. ^ "Спецификации и ограничения Excel". Поддержка Microsoft . Получено 22 февраля 2023 г.
  74. ^ Тулин, Андерс (6 апреля 2013 г.). «Интерпретация временных меток NTFS». Forensic Focus . Получено 23 июля 2019 г.
  75. ^ "10 главных причин, по которым вам следует прекратить использование Delphi прямо сейчас!". Архивировано из оригинала 23 января 2008 г. Получено 21 января 2008 г.
  76. ^ "Folio TechNote". Архивировано из оригинала 9 февраля 2008 года . Получено 21 января 2008 года .
  77. ^ "Дата – Javascript". MDN . Получено 5 июля 2022 г. .
  78. Уильям Поркет (15 августа 2007 г.). "Часто задаваемые вопросы о проекте 2038" . Получено 5 марта 2010 г.
  79. ^ "Date/Time Conversion Contract Language" (PDF) . Office of Information Technology Services, New York. 23 ноября 2021 г. . Получено 25 февраля 2023 г. .
  80. ^ «Все порты TCP/IP, находящиеся в состоянии TIME_WAIT, не закрываются по истечении 497 дней с момента запуска системы в Windows Vista, Windows 7, Windows Server 2008 и Windows Server 2008 R2».
  81. ^ "Компьютер зависает через 49,7 дней". 8 мая 1999 г. Архивировано из оригинала 8 мая 1999 г.
  82. ^ "Эффект гистерезиса при восхождении на вершину пула потоков · Выпуск № 51935 · dotnet/runtime". GitHub . Получено 25 февраля 2024 г. .
  83. ^ Эдгар Альварес (1 мая 2015 г.). «Чтобы Boeing Dreamliner продолжал летать, перезагружайте его каждые 248 дней». Engadget . Получено 2 апреля 2020 г. .
  84. Гарет Корфилд (2 апреля 2020 г.). «Самолеты Boeing 787 необходимо выключать и включать каждые 51 день, чтобы предотвратить показ пилотам «вводящих в заблуждение данных». The Register . Получено 2 апреля 2020 г.
  85. ^ "Ответ на вопрос о переполнении/переходе Arduino millis()". EEWeb . 22 марта 2018 г.
  86. ^ «Питание – Как отслеживать миллисы в спящем режиме».