Проблема 2038 года
Материал из Википедии — свободной энциклопедии
![](https://upload.wikimedia.org/wikipedia/commons/e/e9/Year_2038_problem.gif)
Проблема 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 миллиарда лет[1], что намного больше возраста Вселенной.
Microsoft Windows
[править | править код]Проблема 2038 года актуальна и для 32-разрядных версий Windows, так как значительная часть самой ОС и большое число программ для неё написано на C/C++. Разработчики Windows утверждают[2], что исправили большинство мест в коде, подверженных этой проблеме, однако они не могут дать никаких гарантий по поводу стороннего ПО.
Linux
[править | править код]Начиная с версии 5.6 ядра Linux проблема решена, но по состоянию на 2020 год, существует огромное количество ПО, которое все ещё нужно исправить[3].
MySQL
[править | править код]Популярная СУБД MySQL и SQL Server для типа TIMESTAMP имеет некоторые ограничения: значения, которые содержат дату и время в TIMESTAMP, находятся в диапазоне от ‘1970-01-01 00:00:01 UTC’ до ‘2038-01-19 03:14:07 UTC’[4]. Такая же проблема возникает при использовании типа INT для хранения меток времени UNIX, для её решения необходимо поменять тип таких полей на BIGINT.
См. также
[править | править код]Примечания
[править | править код]- ↑ секунд — это примерно лет
- ↑ Year 2038 problem — GES on Windows 7 — Site Home — MSDN Blogs . Дата обращения: 5 января 2011. Архивировано 9 июля 2011 года.
- ↑ Michael Larabel. Linux 5.6 Is The First Kernel For 32-Bit Systems Ready To Run Past Year 2038 (29 января 2020). Дата обращения: 13 февраля 2020. Архивировано 6 февраля 2020 года.
- ↑ MySQL Dev . Дата обращения: 9 января 2013. Архивировано 9 января 2013 года.
Text is available under the CC BY-SA 4.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.