Как вы думаете о дате и времени? Скорее всего, вы думаете об этом как о годе, месяце, дне, часе, минуте и секунде. Компьютеры так не делают. Это слишком сложно. Нет, компьютеры хранят время как количество секунд с полуночи 1 января 1970 года по Гринвичу. Запомните этот бит GMT, он будет важен позже.

Например, когда я это записываю, время составляет один миллиард четыреста пятьдесят пять миллионов двести восемьдесят пять тысяч шестьсот восемьдесят четыре.

Звучит сложно, но на самом деле это не так.

Я думаю, вы все знаете, что в минуте 60 секунд, верно? Итак, если вы разделите это число на шестьдесят, вы получите количество минут с 1 января 1970 года. Далее, шестьдесят минут в часе, шестьдесят секунд в минуте, шестьдесят умножить на шестьдесят — это 3600, деление времени на 3600 даст вам число. часов и так далее и тому подобное.

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

Однако сообразительные читатели могли обнаружить проблему. Какое максимальное значение для этого числа? Получается, два миллиарда сто сорок семь миллионов четыреста восемьдесят три тысячи шестьсот сорок семь. Это максимальное значение, которое мы в области информатики называем «32-битным целым числом со знаком». (Для любого из вас, занимающихся математикой, причина, по которой это называется 32-битным целым числом со знаком, заключается в том, что оно имеет длину 31 бит (плюс один бит, если оно отрицательное), и это число равно двум в степени 31. ) Это было выбрано просто потому, что еще в 1970-х никто не думал, что им нужно большее число. Он мог быть установлен на «64-битное целое число со знаком», максимальное значение которого равно девяти квадриллионам. Однако это удваивает объем пространства, занимаемого значением, а пространство в то время было ценным товаром.

Однако есть проблема.

Что, если это значение времени достигнет максимума?

И когда? Что ж, вопрос «когда» прост: в 3:14:08 утра по Гринвичу 19 января 2038 года. Что произойдет в этот момент, так это то, что ценность времени упадет до своего минимума, то есть минус два миллиарда, yadda yadda, шестьсот сорок восемь.

И это значение времени — 20:46:03 по Гринвичу 13 февраля 1901 года. И многие компьютеры по всему миру, если они не были обновлены, будут думать, что сейчас 1901 год.

Решение кажется простым: используйте поле большего размера, чтобы вы могли отслеживать время, например, за 292 миллиарда лет с помощью 64-битного числа. Однако изменение этого параметра вызывает всевозможные проблемы совместимости, такие как программы, не ожидающие, что число будет таким высоким, и сбой. Фигово.

Но я обещал во вступлении, что расскажу о блокировке айфонов. Что ж, некоторое время назад сообщалось об ошибке для iOS 8–9.3, из-за которой установка даты на 1 января 1970 года может привести к блокировке устройства в определенных часовых поясах.

По сути, когда ваш телефон показывает вам время, он сначала должен учитывать, в каком часовом поясе вы находитесь, поскольку внутри он считает время с полуночи 1 января 1970 года по Гринвичу, помните? Ну, сначала он должен настроить это время для вашего часового пояса, поэтому он добавляет или вычитает количество секунд в зависимости от вашего часового пояса.

Однако, поскольку 1 января 1970 года — это время 0, возможно, что оно вычитает достаточное количество секунд, чтобы сделать значение времени с поправкой на часовой пояс отрицательным. Дальше он идет своей веселой дорогой, деля значение времени на всякие вещи, чтобы получить ряд из шести понятных вам чисел (год, месяц, день, час, минута, секунда).

Однако, когда он выполняет эти деления, он получит отрицательные числа. А потом будет: «Подождите секунду, почему я в часе -13? Это не имеет смысла?»

И он рухнет.

И перезагрузиться.

И снова крах.

И так далее, в вечном цикле неудач. Так что не делай этого. И я понимаю, что моя фраза «не делайте этого» заставит вас всех захотеть это сделать, но, если вы не хотите пресс-папье за ​​500 долларов, пожалуйста, не делайте этого на самом деле.