Она называется Year 2038 problem. Проблема, с которой человечество столкнется через 34 года, может проявить себя в программах, написанных на Си и использующих стандартную библиотеку времени standard time library (time.h). В библиотеке time.h для внутреннего представления значений текущей даты и времени используется переменная time_t, где в формате целого числа хранится число секунд, накапливаемое с 0 часов 00 минут 00 секунд 1 января 1970 года по Гринвичу. С тех пор вот уже более 30 лет каждую секунду значение time_t увеличивается на единицу. Избранная разработчиками Unix форма представления времени в секундах без минут, часов, суток, месяцев и лет привлекательна тем, что для вычисления длительности интервала между двумя моментами достаточно одного арифметического действия. Но, приняв это вполне разумное решение, разработчики все же оказались не слишком дальновидны и допустили просчет, который должен проявиться через 74 года после запуска счетчика. Суть «Проблемы 2038» заключается в том, что для хранения значения времени используются 32 двоичных разряда, следовательно, максимальное значение переменной time_t равно 2 в 31-й степени минус 1, то есть 2 147 483 647. Момент, когда наступит переполнение time_t, выпадает на 19 января 2038 года. Точнее говоря, «Проблема 2038 года» заложена в POSIX. Так называется набор стандартов, известный в США как IEEE 1003, его международное название — ISO/IEC 9945. POSIX (Portable Operating System Interface) служит стандартом для прикладных пользовательских интерфейсов с 1985 года для различных вариантов ОС Unix. Итак, 19 января 2038 года в 3 часа 14 минут 8 секунд случится «катастрофа». Целое со знаком time_t по достижении значения 2 147 483 647 и будучи увеличенным на единицу превратится в -2 147 483 648, что соответствует 13 декабря 1901, 8:45:52. Если не принять профилактических мер, то на всех Unix-системах по всему миру после 19 января 2038 года наступит 13 января 1901 года и большинство функций, использующих time_t, выдадут код ошибки. Для интервала времени с 1 января 1970 года по 19 января 2038 года придумано специальное название — «эпоха Unix» (Unix Epoch). |