Максимально понятный гид от Дениса Пешехонова.

14 июля 2017 года в 5:40:00 по Москве произошло знаковое событие: UNIX-время было равно 1 500 000 000. Если бы я пил, предложил бы накатить по 150 за такое дело.

Разъяснение для неайтишников

Компьютерам нужно абсолютное время, которое не зависит от часовых поясов и способа записи, поэтому когда-то решили выражать его вот как: любой момент времени это такое число, сколько секунд прошло с момента [четверг, 01.01.1970 0:00:00 GMT+0] и до него. Если момент был раньше этой даты, то число отрицательное.

Подавляющее большинство программистов хотя бы иногда работают с UNIX-временем. Как правило, в таком виде удобно сохранять разные даты, а для просмотра человеком преобразовывать уже в нужный формат с учётом часового пояса и способа представления (например в США сначала пишут месяц, а потом день; в англоязычном мире распространён 12-часовой формат времени и так далее).

Важно понимать, что UNIX-время одинаковое в один и тот же момент для всех людей на планете. И для всех компьютеров на планете, что ещё важнее.

Только что прошло ровно полтора миллиарда секунд с полуночи (по Гринвичу) 1 января 1970 года. Каждые ~3 года проходит ещё сто миллионов секунд, и второй старший разряд увеличивается на единицу. А ровно два миллиарда будет аж в 2033 году, в среду 18-го мая в 6:33:20 по Москве.

Но есть ещё кое-что любопытное. Существует так называемая «Проблема 2038-го года».

Дело в том, что во многих компьютерах и прочих электронных устройствах, если говорить грубо, целые числа не могут быть больше, чем 2 147 483 647 (или 2^31-1) из-за некоторых технических особенностей.

Если в таком устройстве где-то хранится и используется время, то оно наверняка в UNIX-формате, а это значит, что самый поздний момент, который понимает такой компьютер – вторник, 19 января 2038 года в 3:14:07 GMT+0. Потому что в этот момент пройдёт ровно 2 147 483 647 секунд с начала отсчёта в 1970-м году.

Что же будет дальше?

Техника с этого момента будет жёстко глючить, потому что время в ней зациклено, и при достижении наибольшего допустимого значения оно переместится в наименьшее допустимое: пятница, 13 декабря 1901 года в 20:45:52. Что равно -2 147 483 648 или -2^31. Именно столько секунд прошло между этой датой и первым января 1970-го.

Что делать?

Как пользователь вы можете сделать только одно: не сидеть на старой технике и не использовать старые устройства и программы. А если вы кодер, то сами знаете: никаких int32 на таймстампы, ребята. Только long, Number, int64 или что там в вашем любимом языке.

Источник: страница «ВКонтакте» Дениса Пешехонова

Комментарии