For faster navigation, this Iframe is preloading the Wikiwand page for Проблема 2038 года.

Проблема 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 миллиарда лет[1], что намного больше возраста Вселенной.

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

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

Популярная СУБД MySQL и SQL Server для типа TIMESTAMP имеет некоторые ограничения: значения, которые содержат дату и время в TIMESTAMP, находятся в диапазоне от ‘1970-01-01 00:00:01 UTC’ до ‘2038-01-19 03:14:07 UTC’[4]. Такая же проблема возникает при использовании типа INT для хранения меток времени UNIX, для её решения необходимо поменять тип таких полей на BIGINT.

Примечания

[править | править код]
  1. секунд — это примерно лет
  2. Year 2038 problem — GES on Windows 7 — Site Home — MSDN Blogs. Дата обращения: 5 января 2011. Архивировано 9 июля 2011 года.
  3. 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 года.
  4. MySQL Dev. Дата обращения: 9 января 2013. Архивировано 9 января 2013 года.
{{bottomLinkPreText}} {{bottomLinkText}}
Проблема 2038 года
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?