Interested Article - Проблема 2038 года

Пример, показывающий сброс даты (в 03:14:08 UTC 19 января 2038 года).

Проблема 2038 года в вычислительной технике — ожидаемые сбои в программном обеспечении 19 января 2038 года . Данная проблема затронет программы и системы, в которых используется представление времени по стандарту POSIX ( UNIX-время ), которое представляет собой количество секунд , прошедшее с полуночи 1 января 1970 года . Такое представление времени — это стандарт для Unix -подобных операционных систем (из-за повсеместного использования языка Си ).

Описание

В старых 32-битных системах (до середины 1990-х) используется тип данных time_t для хранения секунд в виде 32-битного целого со знаком. Самая поздняя дата, которая может быть представлена таким форматом в стандарте POSIX — это 03:14:07, вторник, 19 января 2038 года по Всемирному времени (UTC) .

Более позднее время заставит такое поле данных стать отрицательным, как бы закольцевав таким образом время (поскольку отрицательное число может быть воспринято программами как время в 1970 или 1901 году , в зависимости от реализации). В результате любые расчёты, включающие дату позже 19 января 2038 года, могут привести к сбою программы либо к ошибочным вычислениям.

Для проблемы 2038 года не существует простого решения для существующих комбинаций операционных систем и прикладного программного обеспечения. Изменение определения типа time_t на 64 бита нарушит бинарную совместимость программ, существующих хранимых данных и всего другого, использующего представление времени в бинарном виде. А приведение time_t в целое без знака может нарушить работу программ, которые вычисляют разницу во времени.

В большинстве операционных систем для 64-битных архитектур уже используется 64-битное представление целого в time_t . Переход на такие архитектуры уже происходит, и ожидается, что он будет завершён к 2038 году.

В дополнение к этому, 32-битный формат time_t также включён в спецификации форматов файлов, таких как повсеместно распространённый архивный формат ZIP . Формат файла может существовать в течение времени, за которое сменятся многие поколения компьютеров, а это означает, что проблема 2038 года останется актуальной.

Введение 64-битного формата вносит новую дату «закольцовывания»: так как максимальное значение составит секунд, оно произойдёт примерно через 292 миллиарда лет , что намного больше возраста Вселенной .

Microsoft Windows

Проблема 2038 года актуальна и для 32-разрядных версий Windows , так как значительная часть самой ОС и большое число программ для неё написано на C / C++ . Разработчики Windows утверждают , что исправили большинство мест в коде, подверженных этой проблеме, однако они не могут дать никаких гарантий по поводу стороннего ПО.

Linux

Начиная с версии 5.6 ядра Linux проблема решена, но по состоянию на 2020 год, существует огромное количество ПО, которое все ещё нужно исправить .

MySQL

Популярная СУБД MySQL и SQL Server для типа TIMESTAMP имеет некоторые ограничения: значения, которые содержат дату и время в TIMESTAMP, находятся в диапазоне от ‘1970-01-01 00:00:01 UTC’ до ‘2038-01-19 03:14:07 UTC’ .

См. также

Примечания

  1. секунд — это примерно лет
  2. . Дата обращения: 5 января 2011. 9 июля 2011 года.
  3. Michael Larabel. (29 января 2020). Дата обращения: 13 февраля 2020. 6 февраля 2020 года.
  4. . Дата обращения: 9 января 2013. 9 января 2013 года.
Источник —

Same as Проблема 2038 года