Почему часы в компьютерах могут «вернуться» в прошлое

Во многих системах время хранится не как календарная дата, а как число секунд, прошедших с начала условной эпохи — 1 января 1970 года. Такой способ удобен: чтобы сравнить даты или вычислить промежуток между ними, достаточно работать с целыми числами.

Проблема возникает, если для счётчика выделено 32 бита и он хранит знаковое целое число. Один бит нужен для знака, поэтому максимальное значение достигается примерно через 68 лет после начала отсчёта — в январе 2038 года.

Что происходит при переполнении

В распространённом формате последний допустимый момент наступает 19 января 2038 года. Следующая секунда уже не помещается в прежний диапазон: число перескакивает с максимального положительного значения к минимальному отрицательному. Если прочитать его как время после эпохи 1970 года, получается дата в декабре 1901-го.

Это не значит, что все устройства в один миг физически сбросят часы. Сбой возможен там, где программа использует такой счётчик и не умеет корректно обработать переполнение: она может принять будущую дату за давнее прошлое. Например, таймер способен решить, что срок уже истёк, или неверно вычислить, сколько осталось до запланированного события.

Как проблему устраняют

Надёжный выход — хранить время в формате с более широким диапазоном, например в 64-битном счётчике. Но мало заменить тип числа: важно проверить связанные программы, файлы и устройства, которые передают или интерпретируют временные метки. Иначе один старый компонент может передать новому системе неверное значение.

Поэтому дата 2038 года — не единая «поломка всех компьютеров», а крайний срок для отдельных унаследованных решений. Особенно важно заранее проверить оборудование и программное обеспечение, которое редко обновляют: его ошибка может обнаружиться не в самих часах, а в расписании, сроке действия или журнале событий.