Как компьютеры узнают время? В чем проблема 2038 года?

Время эпохи или время Unix - это количество секунд, прошедшее с 1 января 1970 года.

На момент написания, время эпохи 1632221080 и продолжается отсчет.

Время Эпохи одинаково, независимо от того, где вы находитесь на земном шаре.

Время эпохи используется компьютерами как «отправная точка» времени.

Зачем нужна эпоха?

Чтобы отслеживать время, компьютеру нужно знать, с чего начать.

Эпоха - это популярное соглашение для компьютеров, позволяющее отслеживать время. Время начинается в 00:00:00 Чт, 1 января 1970 г. (всемирное координированное время) и измеряется в секундах. Таким образом, время эпохи - это количество секунд, прошедших с начала нулевой эпохи.

Обратите внимание, что это не единственная эпоха. Другие распространенные эпохи:

  • 1 января 1900 года используется Microsoft Excel.
  • 1 января 2001 года используется фреймворком Apple Cocoa.
  • 6 января 1980 года используется «» GPS-устройствами.

В этой статье под эпохой понимается эпоха Unix 01.01.1970.

Компьютеры должны знать начало времени

Если вы что-то считаете, это должно иметь отправную точку.

Например, если вы хотите узнать высоту здания, вам нужно указать нулевую точку для высоты. Это может быть цокольный этаж, может быть уровень моря. Тем не менее, отсутствие нулевой точки делает невозможным определение высоты.

То же самое и со временем. Компьютер не может просто добавить секунды к неопределенному моменту времени. У него должна быть нулевая точка.

Разработчики Unix решили, что полночь 1 января 1970 года станет нулевой точкой времени для операционных систем Unix.

Время эпохи (или временная метка Unix) - это количество секунд, прошедших с начала эпохи.

Почему время эпохи начинается в 1970 году

Система Unix разрабатывалась между 1969 и 1971 годами. Первое внутреннее руководство было выпущено в 1971 году.

Эти ранние версии 32-битных систем Unix могли представлять промежуток времени всего в 829 дней. (Это произошло потому, что время измерялось с шагом 1/60 секунды). Из-за этого ограничения нулевой момент времени пришлось выбрать из недавнего прошлого.

Это решение было принято примерно в 1971 году во время разработки Unix. Таким образом, они решили сначала установить Эпоху на 01.01.1971.

Позже система Unix начала измерять время с интервалом в 1 секунду. Таким образом, представимый временной интервал увеличился с 829 дней до примерно 136 лет. В результате Эпоха больше не должна была быть в недавнем прошлом.

Эпоха была перенесена на начало декады 01.01.1970 из соображений удобства.

Проблемы с Epoch Time

Эпоха - это большое число. В настоящее время это более 1,6 миллиарда.

Многие компьютеры работают с 32 битами. Это означает, что наибольшее число (со знаком), которое может быть представлено такой системой, - 231-1. Это число равно 2,147,483,647.

Теперь, если вы посмотрите на текущее время Эпохи, оно (на момент написания) 1,631,274,259 и продолжает подсчет. Сравните это с максимальным числом, которое может быть представлено 32-битной системой. Вы можете видеть, что время приближается.

Оказывается, время эпохи превысит максимальное число, которое может понять 32-битная система, к 19 января 2038 г..

В частности, в 03:14:08 UTC во вторник, 19 января 2038 г. 32-разрядные версии времени Epoch перестанут работать. Это связано с тем, что время эпохи становится слишком большим числом, чтобы его можно было представить 32-битным числом со знаком.

Перед этим любое программное обеспечение, использующее 32-битные временные метки, необходимо обновить в соответствии с новым соглашением. Кроме того, необходимо обновить форматы файлов, использующие 32-битные временные метки. Один из способов сделать это - перевести 32-битные системы на 64-битные. Это переносит проблему на миллиарды лет в будущее.

Если обновления не будут внесены, следующая секунда после 03:14:08 UTC во вторник, 19 января 2038 года будет ошибочно интерпретирована как 20:45:52 Fri 13 декабря 1901 года по всемирному координированному времени .

В информатике эта проблема называется проблемой 2038 года.

Вывод

Время эпохи (также известное как время Unix) - это количество секунд, прошедших с 01.01.1970. Он широко используется среди Unix-подобных операционных систем.

Компьютер не может добавлять секунды к неопределенному значению. Им нужно знать, с чего начать. Эпохи определяют нулевой момент времени для компьютеров.

Поскольку Unix разрабатывалась между 1969 и 1971 годами, для удобства они поместили Epoch в начало десятилетия 1970 года.

Проблема с эпохой 1970 года заключается в том, что 32-разрядные системы не могут понять время эпохи после 19 января 2038 года. Это связано с тем, что количество секунд становится слишком большим. Чтобы решить эту проблему, необходимо обновить системы до этого момента.