Проблема 2000 года
- 1 year ago
- 0
- 0
Проблема 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 миллиарда лет , что намного больше возраста Вселенной .
Проблема 2038 года актуальна и для 32-разрядных версий Windows , так как значительная часть самой ОС и большое число программ для неё написано на C / C++ . Разработчики Windows утверждают , что исправили большинство мест в коде, подверженных этой проблеме, однако они не могут дать никаких гарантий по поводу стороннего ПО.
Начиная с версии 5.6 ядра Linux проблема решена, но по состоянию на 2020 год, существует огромное количество ПО, которое все ещё нужно исправить .
Популярная СУБД MySQL и SQL Server для типа TIMESTAMP имеет некоторые ограничения: значения, которые содержат дату и время в TIMESTAMP, находятся в диапазоне от ‘1970-01-01 00:00:01 UTC’ до ‘2038-01-19 03:14:07 UTC’ .