Ошибки форматирования и хранения времени
В информатике и типов данных ограничения ошибки программного обеспечения могут привести к ошибкам в времени и даты расчете или отображении . Чаще всего это проявления арифметического переполнения , но они также могут быть результатом других проблем. Наиболее известным последствием этого типа является проблема 2000 года , но существует множество других важных дат или времен, которые вызвали или будут вызывать проблемы в зависимости от различных недостатков программирования.
1975 год
[ редактировать ]4 января 1975 года 12-битное поле, которое использовалось для дат в операционных системах DECsystem-10, переполнилось. Пока разрабатывался альтернативный формат, из-за этой ошибки возникло множество проблем и сбоев. [ 1 ]
1978 год.
[ редактировать ]Digital Equipment Corporation Операционная система OS/8 для компьютера PDP-8 использовала только три бита в течение года, что соответствует периоду с 1970 по 1977 год. [ 2 ]
Это было признано, когда была разработана операционная система COS-310 , и даты записывались по-другому. [ 3 ]
1993 год
[ редактировать ]Несколько Sierra Entertainment игр , выпущенных для классической Mac OS, начали зависать при запуске 18 сентября 1993 года. Проблема в версии Sierra 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 годом произошли еще две вехи, связанные с датами, которые получили меньше внимания, чем надвигавшаяся тогда проблема 2000 года.
Первый переворот GPS
[ редактировать ]Даты GPS выражаются в виде номера недели и дня недели, при этом номер недели передается в виде десятибитового значения . GPS Это означает, что каждые 1024 недели (около 19,6 лет) после воскресенья, 6 января 1980 года ( эпоха ), дата снова сбрасывается на эту дату; впервые это произошло в 23:59:47 21 августа 1999 года. [ 7 ] второй раз в 23:59:42 UTC 6 апреля 2019 г. и повторится 20 ноября 2038 г. [ 8 ] Чтобы решить эту проблему, в модернизированных навигационных сообщениях GPS используется 13-битное поле, которое повторяется только каждые 8192 недели (157 лет) и не вернется к нулю до 2137 года. [ 9 ]
9/9/99
[ редактировать ]Многие устаревшие программы или наборы данных использовали «9/9/99» в качестве поддельного значения , обозначающего либо неопределенную дату, либо в качестве терминатора, указывающего, что в наборе больше нет данных. Это привело к сбою многих систем по наступлении фактической даты — 9 сентября 1999 года. [ 7 ]
2000 год
[ редактировать ]Двузначное представление года
[ редактировать ]Последующие проблемы, вызванные некоторыми временными решениями проблемы 2000 года, будут возникать в различные моменты XXI века. Некоторые программы были адаптированы к проблеме 2000 года, продолжая использовать двузначные годы, но выбирая произвольный год, до которого эти годы интерпретируются как 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 для классической 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 кодируются как в шестнадцатеричном, так и в двоично-десятичном формате: от 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 ]
от Sony PlayStation 3 неправильно считала 2010 год високосным , поэтому несуществующее 29 февраля 2010 года было показано 1 марта 2010 года, что привело к ошибке программы . [ 18 ]
Наиболее серьезный подобный сбой произошел в Германии, где более 20 миллионов банковских карт стали непригодными для использования, а также в Citibank Belgium, чьи чипы идентификации клиентов Digipass перестали работать. [ 19 ]
2011 год
[ редактировать ]Тайвань официально использует календарь Минго , который считает 1912 год по григорианскому календарю своим годом 1. Таким образом, 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 ] Кроме того, начиная с 2020 года Crystal Reports 8.5 не сможет создавать отдельные отчеты. [ 24 ]
Парковочные счетчики Parkeon в Нью-Йорке и других местах не могли принимать кредитные карты в качестве формы оплаты, начиная с 2020 года. Было реализовано обходное решение, но требовалось индивидуальное обновление каждого счетчика. Ожидалось, что в Нью-Йорке счетчики будут отремонтированы не раньше 9 января. [ 25 ] [ 26 ]
В Польше 5000 кассовых аппаратов перестали правильно печатать дату. [ 27 ]
Спортивные умные часы Suunto отображали ошибку при вычислении дней недели, которые были обозначены с шагом +2 (например, ПТ, а не СР, СБ, а не ЧТ). Для часов модели Suunto Spartan ошибка исправлена в версии прошивки 2.8.32. [ 28 ]
Классическая MacOS
[ редактировать ]Панель управления в классической версии 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 году, до проблемы UNIX 2038 года. [ 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+ затронут также , формат по умолчанию для всех последних компьютеров Macintosh от Apple. Замена файловой системы Apple решает эту проблему.
ProDOS для компьютеров Apple II поддерживает только двузначные номера года. Чтобы избежать проблем 2000 года, Apple выпустила техническую записку, в которой говорилось, что номер года должен обозначать 1940–2039 годы. [ 53 ] Программное обеспечение для платформы может неправильно отображать даты, начиная с 2040 года, хотя сторонние компании прилагают усилия по обновлению ProDOS и прикладного программного обеспечения для поддержки лет до 4095. [ 54 ]
2042 год
[ редактировать ]18 сентября 2042 года часы времени суток (TODC) на мэйнфрейме S/370 IBM и его преемниках, включая текущую zSeries, перейдут на смену. [ 55 ]
Старые TODC были реализованы как 64-битные числа, равные 2. −12 микросекундные (0,244 нс) единицы, а стандартной базой было 1 января 1900 года по универсальному времени . В июле 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 год
[ редактировать ]DOS и Windows даты файлов API и функции преобразования (такие как 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 (полночь по всемирному координированному времени, 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 хранит даты в сантисекундах с 1 января 1900 года в пяти байтах — 40 бит. Эти временные метки используются внутри и отображаются в метаданных файла (адреса загрузки и выполнения). Эта эпоха заканчивается 3 июня 2248 года в 06:57:57.75 UTC. [ 59 ]
2262 год
[ редактировать ]Некоторые системы хронометража отсчитывают наносекунды с 1970 года, используя 64-битное целое число со знаком, которое переполнится 11 апреля 2262 года, 23:47:16. Язык программирования Go UnixNano
API — один из примеров. [ 60 ] Другие примеры включают объект Timestamp в Python pandas , [ 61 ] C++ хроно::наносекунды, [ 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 ]
Годы 32768 и 65536.
[ редактировать ]Программы, обрабатывающие годы как 16-битные значения, могут столкнуться с проблемами, связанными с годом 32 768 или 65 536, в зависимости от того, рассматривается ли значение как целое число со знаком или без знака.
Для задачи 32 768 года годы после 32 767 можно интерпретировать как отрицательные числа, начиная с -32 768. [ 75 ] Проблема 65 536 года с большей вероятностью проявится, если представить год 65 536 как год 0. [ 76 ]
Год 100 000
[ редактировать ]Год 100 000 станет первым шестизначным годом по григорианскому календарю.
275760 год
[ редактировать ]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 ]
Переполнение относительного времени
[ редактировать ]Майкрософт
[ редактировать ]В 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 году ФАУ выпустило директиву по летной годности, связанную с проблемой, из-за которой, если самолет не будет полностью отключен до достижения 51 дня безотказной работы, системы начнут отображать вводящие в заблуждение данные. [ 84 ]
Ардуино
[ редактировать ]Платформа Arduino предоставляет относительное время с помощью функции millis(). Эта функция возвращает 32-битное значение без знака для «миллисекунд с момента запуска», которое должно обновляться каждые 49,71 дня. По умолчанию это единственный источник синхронизации, доступный на платформе, и программам необходимо проявлять особую осторожность при обработке ролловеров. [ 85 ] Внутренне функция millis() основана на подсчете прерываний таймера. Некоторые режимы энергосбережения отключают прерывания и, следовательно, не позволяют счетчику двигаться во время сна. [ 86 ]
Проблемы исторического года
[ редактировать ]Также в исторические годы могут возникнуть проблемы при обработке исторических событий, например:
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Остейн, Роб (2 февраля 1987 г.). «ДАТА-86, или Призрак прошлого звонка» . Дайджест РИСКИ . 4 (45). Комитет ACM по компьютерам и государственной политике . Проверено 29 декабря 2014 г.
- ^ «Каталог linctape-images/os8l/ps-8-system-25.linc» .
OS/8 может хранить даты только за 8-летний период...
- ^ «Корпорация цифрового оборудования PDP-8: Часто задаваемые вопросы» .
COS-310, коммерческая операционная система DEC для PDP-8... файловая система почти такая же, как OS/8, но даты записываются по-другому.
- ^ Jump up to: а б «Новостные заметки» . Журнал ИнтерЭкшн . Том. ВИ, нет. 3. Сьерра Развлечения . 1993. с. 12.
- ^ «Бомба замедленного действия Macintosh Сьерры» . www.benshoof.org . Проверено 9 марта 2023 г.
- ^ «Последние новости об ошибке даты» .
- ^ Jump up to: а б с Дженис Л. Гоган (9 августа 1999 г.). «Приложения к девяткам» . Информационная неделя . Архивировано из оригинала 3 октября 2008 года . Проверено 21 января 2008 г.
- ^ Jump up to: а б «Неделя GPS закончится 6 апреля» . www.cyber.gov.au . Архивировано из оригинала 20 октября 2019 года . Проверено 10 июня 2019 г.
- ^ «Обновление номера недели GPS — апрель 2019 г.» . GPS.gov . Национальное координационное бюро по космическому позиционированию, навигации и времени. 6 апреля 2019 года . Проверено 25 февраля 2023 г.
- ^ Роджер Дешнер (21 декабря 2001 г.). «Определение и исправление дат с двузначными годами» . Университет Иллинойса в Чикаго. Архивировано из оригинала 15 февраля 2002 года . Проверено 19 января 2010 г. См. «Пример 1: 100-летнее фиксированное окно, с 1973 по 2072 год».
- ^ дата — запись даты и времени , Базовые спецификации открытой группы, выпуск 6. IEEE Std 1003.1, издание 2004 г.
- ^ Манджу, Фархад. «Тик Unix достигает миллиарда» . Проводной . Проверено 29 марта 2022 г.
- ^ «Банк Квинсленда пострадал от сбоя «Y2.01k»» . 4 января 2010 г. Проверено 25 февраля 2023 г.
- ^ Фрид, Ина (5 января 2010 г.). «Глюк Windows Mobile даты 2010 смс 2016» . CNET . Проверено 24 февраля 2023 г.
- ^ «В телефонах Windows Mobile возникла ошибка Y2K+10» . 4 января 2010 года. Архивировано из оригинала 23 октября 2013 года . Проверено 3 июля 2013 г.
- ^ «Банк Квинсленда против Y2K – обновленная информация» . 4 января 2010 года. Архивировано из оригинала 8 января 2010 года . Проверено 3 июля 2013 г.
- ^ Лофтус, Джек (28 февраля 2010 г.). «Ошибка: 8001050F приводит к отключению сети PlayStation Network» . Гизмодо .
- ^ Метровебукметро (2 марта 2010 г.). «Sony исправляет ошибку «високосного года» PS3» . Метро . Проверено 25 октября 2022 г.
- ^ «Bug de l'an 2010 en Allemagne: плюс 20 миллионов неиспользуемых банковских карт» [Ошибка 2010 года в Германии: более 20 миллионов непригодных для использования банковских карт]. RTL Бельгия (на французском языке). 5 января 2010 года . Проверено 25 февраля 2023 г.
- ^ «Проблема Тайваня Y1C» . Новости Пиньинь . 2 января 2006 г.
- ^ «Миссия НАСА по охоте за кометами в глубоком космосе подходит к концу» . Лаборатория реактивного движения. 20 сентября 2013 г. Архивировано из оригинала 14 октября 2013 г. Проверено 9 июля 2022 г.
- ^ Мансур, Сакиб (1 января 2020 г.). «WWE 2K20 отказывается запускаться в 2020 году» . СегментСледующий . Проверено 1 января 2020 г.
- ^ «Star Wars Jedi: Fallen Order и WWE 2K20 не запускаются из-за ошибки «2020 года» [ОБНОВЛЕНИЕ]» . DSOGaming . 1 января 2020 года . Проверено 19 ноября 2020 г. .
- ^ «sql – соединение ODBC/Crystal Reports» . Переполнение стека . Проверено 19 ноября 2020 г. .
- ^ «Парковочные счетчики по всему Нью-Йорку, не принимающие кредитные карты, никогда не были запрограммированы на работу в 2020 году» . 2 января 2020 г. Проверено 19 ноября 2020 г. .
- ^ «Сбой в программном обеспечении парковочного счетчика 2002 года приводит к общегородскому сбою - Gothamist» . Архивировано из оригинала 4 января 2020 года . Проверено 4 января 2020 г.
- ^ Паллус, Патрик (3 января 2020 г.). «Большой провал фискальных принтеров. Производитель ремонтирует устройства, компании подсчитывают убытки» . Business Insider (на польском языке) . Проверено 4 января 2020 г.
- ^ «Обновления программного обеспечения Suunto Spartan» .
- ^ «Техническая записка TN1049 Приближаясь к тысячелетию: Mac и 2000 год» . Архивировано из оригинала 13 ноября 2014 года . Проверено 20 января 2020 г. .
- ^ «Исправления Vintage Mac 2020» . Проверено 21 января 2020 г.
- ^ «Q192201: XCLN: Schedule + 1.0 не будет работать после 31 декабря 2019 г.» . Архив базы знаний . Проверено 6 июля 2022 г.
- ^ Чон, Юджин (13 января 2021 г.). «Пользователи сообщают об интересном сбое в Samsung One UI 3.0, но его легко исправить» . Телефонная арена . Проверено 9 марта 2023 г.
- ^ Бхардвадж, Девешвар (21 мая 2021 г.). «Отслеживание ошибок обновления Samsung One UI 3.0/3.1 (Android 11) [Продолжение обновлено]» . ПиуникаВеб . Проверено 9 марта 2023 г.
- ^ Родился Гюнтер (1 января 2022 г.). «Проблема Exchange 2022 года: не удалось загрузить модуль сканирования FIP-FS — невозможно преобразовать «2201010001» в длинный (01.01.2022, 00:00 UTC)» . Born's Tech и Windows World . Проверено 1 января 2022 г.
- ^ Мартин, Александр (2 января 2022 г.). «Помните ошибку 2000 года? Microsoft подтверждает новую проблему 2000 года» . Небесные новости .
- ^ «Часы Honda застряли на 20 лет в прошлом, и это невозможно исправить» . Ялопник . 6 января 2022 г. Проверено 8 января 2022 г.
- ^ «Некачественное кодирование привело к тому, что некоторые автомобили Honda застряли в 2002 году» . Engadget . 7 января 2022 г. Проверено 8 января 2022 г.
- ^ Акоба, Пауло (17 августа 2022 г.). «Владельцы Honda и Acura, у которых возникли проблемы с часами, сообщают, что по состоянию на 17 августа их время корректируется само, но многие все еще застряли с неправильной датой» . Архивировано из оригинала 30 мая 2023 года.
- ^ «Сбой високосного года» отключил некоторые топливные насосы Новой Зеландии Reuters
- ↑ Игра Final Fantasy прервана из-за високосного дня Котаку
- ^ Theatrhythm Final Fantasy на Nintendo Switch не работает сегодня, 29 февраля, по-видимому, потому, что это високосный год IGN
- ↑ EA Sports WRC терпит крах при запуске сегодня, 29 февраля, потому что 2024 год — високосный год IGN
- ^ «Крупные технологические компании предупреждают о «ошибке тысячелетия в Японии» накануне отречения Акихито» . Хранитель . 25 июля 2018 г.
- ^ «Годы с 1900 года + семь бит = поломка в 2028 году» . rachelbythebay.com .
- ^ «MPE/iX Release 7.5 Patch Revision 2028 – Beechglen Development Inc» .
- ^ «Справочник по языку и библиотеке компилятора Palm OS® Protein C/C++» (PDF) . Проверено 12 октября 2019 г.
- ^ "subject:RE: Дата ограничена 2031 годом" . mail-archive.com . Проверено 12 октября 2019 г.
- ^ Дэвид Л. Миллс (12 мая 2012 г.). «Эра НТП и нумерация эпох» . Проверено 24 сентября 2016 г.
- ^ В. Ричард Стивенс; Билл Феннер; Эндрю М. Рудофф (2004). Сетевое программирование UNIX . Аддисон-Уэсли Профессионал. стр. 582–. ISBN 978-0-13-141155-5 .
- ^ «gmtime, _gmtime32, _gmtime64» . Майкрософт . Проверено 8 апреля 2022 г.
- ^ «Диспетчер доступа Oracle» . Сообщества Oracle . Корпорация Оракл. 24 марта 2022 г. Проверено 25 февраля 2023 г.
- ^ Apple Computer, Inc., Внутри Macintosh , Том II, Аддисон Уэсли, 1985, стр. 369
- ^ «Даты ProDOS — 2000 год и позже» . Apple, Inc. Проверено 6 декабря 2019 г.
- ^ «ПроДОС 2.5» . Проверено 9 июня 2021 г.
- ^ Jump up to: а б Ласку, Октавиан; Экам, Ханс-Петер; Козакос, Джордж; Перейра, Пауло Витор (июнь 2013 г.), Руководство по планированию протокола времени сервера , IBM Redbooks (4-е изд.), IBM , стр. 19, ISBN 978-0738438108 , получено 11 августа 2019 г.
- ^ «Примечание SAP 2258792 (требуется доступ к порталу поддержки SAP)» . 30 ноября 2018 г.
- ^ «strptime — Базовые спецификации открытой группы, выпуск 7, издание 2018 г.» . Проверено 4 марта 2023 г.
- ^ Дж. Р. Стоктон (12 апреля 2009 г.). «Критические и знаменательные даты» . Архивировано из оригинала 7 сентября 2015 года . Проверено 20 августа 2009 г.
- ^ https://www.riscosopen.org/wiki/documentation/show/OS_Word%2014_3
- ^ «пакет времени – время» . pkg.go.dev .
- ^ «Функциональность временных рядов/дат – документация pandas 1.3.4» .
- ^ "std::chrono::duration" . ru.cppreference.com .
- ^ «Обновить версию для выпуска v5.0.0» . Архивировано из оригинала 21 января 2021 года . Проверено 19 июня 2021 г.
- ^ ext4: Исправлена обработка расширенного tv_sec.
- ^ Структура диска Ext4: временные метки Inode
- ^ Гершель, Джон (1849). Очерки астрономии . п. 629.
- ^ Сталь, Дункан (2000). Отмечая время: эпический поиск идеального календаря . Джон Уайли и сыновья. п. 185. ИСБН 978-0-471-29827-4 .
- ^ Крис Хемедингер (5 апреля 2010 г.). «В 9999 году...»
- ^ «Файлы базы данных Microsoft Access» . Документация по программированию SAS 9.4 и SAS® Viya® 3.5 . Преобразование значений даты и времени между наборами данных SAS и базой данных Microsoft Access.
- ^ «Перечисление OlMarkInterval (Outlook)» . 30 марта 2022 г.
- ^ «Фильтрация элементов по ключевым словам запроса» . 22 января 2022 г.
- ^ «Различия между системами дат 1900 и 1904 годов - Офис» . Майкрософт . 5 мая 2022 г. Проверено 22 февраля 2023 г.
- ^ «Спецификации и ограничения Excel» . Поддержка Майкрософт . Проверено 22 февраля 2023 г.
- ^ Тулин, Андерс (6 апреля 2013 г.). «Интерпретация временных меток NTFS» . Судебно-медицинский фокус . Проверено 23 июля 2019 г.
- ^ «10 самых интересных причин, почему вам следует прекратить использование Delphi прямо сейчас!» . Архивировано из оригинала 23 января 2008 года . Проверено 21 января 2008 г.
- ^ «Фолио Техническая записка» . Архивировано из оригинала 9 февраля 2008 года . Проверено 21 января 2008 г.
- ^ «Дата – Javascript» . МДН . Проверено 5 июля 2022 г.
- ^ Уильям Порке (15 августа 2007 г.). «Часто задаваемые вопросы по проекту 2038» . Проверено 5 марта 2010 г.
- ^ «Язык контракта преобразования даты и времени» (PDF) . Управление служб информационных технологий, Нью-Йорк. 23 ноября 2021 г. Проверено 25 февраля 2023 г.
- ^ «Все порты TCP/IP, находящиеся в состоянии TIME_WAIT, не закрываются через 497 дней с момента запуска системы в Windows Vista, в Windows 7, в Windows Server 2008 и в Windows Server 2008 R2» .
- ^ «Компьютер зависает через 49,7 дней» . 8 мая 1999 г. Архивировано из оригинала 8 мая 1999 г.
- ^ «Влияние гистерезиса на восхождение в гору пула потоков · Проблема № 51935 · dotnet/runtime» . Гитхаб . Проверено 25 февраля 2024 г.
- ^ Эдгар Альварес (1 мая 2015 г.). «Чтобы Boeing Dreamliner продолжал летать, перезагружайтесь раз в 248 дней» . Engadget . Проверено 2 апреля 2020 г.
- ^ Гарет Корфилд (2 апреля 2020 г.). «Boeing 787 необходимо выключать и включать каждые 51 день, чтобы предотвратить показ пилотам «вводящих в заблуждение данных» . Регистр . Проверено 2 апреля 2020 г.
- ^ «Ответ на вопрос о переполнении/обходе Arduino millis()» . EEWeb . 22 марта 2018 г.
- ^ «Мощность – Как отслеживать миллис в спящем режиме» .