Проблема 2038 года: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
м отмена правки 99358439 участника 85.198.186.127 (обс.)
Метка: отмена
Строка 1: Строка 1:
[[Файл:Year 2038 problem.gif|thumb|400px|Пример, показывающий сброс даты (в 03:14:08 UTC 19 января 2038 года).]]
[[Файл:Year 2038 problem.gif|thumb|400px|Пример, показывающий сброс даты (в 03:14:08 UTC 19 января 2038 года).]]
'''Проблема 2038 года''' в [[Вычислительная техника|вычислительной технике]] — ожидаемые сбои в [[Программное обеспечение|программном обеспечении]] накануне [[19 января]] [[2038 год]]а. Данная проблема затронет программы и системы, в которых используется представление времени по стандарту [[POSIX]] ([[UNIX-время]]), которое представляет собой количество [[Секунда|секунд]], прошедшее с [[Полночь|полуночи]] [[1 января]] [[1970 год]]а. Такое представление времени — это стандарт для [[Unix]]-подобных операционных систем (из-за повсеместного использования языка [[Си (язык программирования)|Си]]).

== Описание ==
В старых 32-[[бит]]ных системах (до середины 1990-х) используется тип данных <code>time_t</code> для хранения секунд в виде <code>signed&nbsp;int</code> (32-битного целого со знаком). Самая поздняя дата, которая может быть представлена таким форматом в стандарте [[POSIX]] — это 03:14:07, вторник, 19 января 2038 года по [[Всемирное координированное время|Всемирному времени (UTC)]].
В старых 32-[[бит]]ных системах (до середины 1990-х) используется тип данных <code>time_t</code> для хранения секунд в виде <code>signed&nbsp;int</code> (32-битного целого со знаком). Самая поздняя дата, которая может быть представлена таким форматом в стандарте [[POSIX]] — это 03:14:07, вторник, 19 января 2038 года по [[Всемирное координированное время|Всемирному времени (UTC)]].



Версия от 07:08, 22 апреля 2019

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

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

Описание

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

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

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

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

Тем не менее, сотни тысяч 32-битных систем всё ещё вводятся в строй в настоящее время, в том числе и во встраиваемых системах. Вызывает сомнение, что они все будут заменены к 2038 году. Несмотря на то, что современные компьютерные системы могут модернизироваться раз в 18—24 месяцев (по «Закону Мура»), встроенные компьютеры могут действовать без модернизации весь срок, который работают системы, ими управляемые. Например, компьютеры управления процессами модели IBM 1800, выпуск которых был начат в 1965 году, всё ещё использовались на одной из атомных станций в Канаде в 2006 году[источник не указан 1858 дней].

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

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

Microsoft Windows

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

MySQL

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

См. также

Примечания