Случайный разговор: почему компьютеры появились 1 января 1970 года?

Java задняя часть
Случайный разговор: почему компьютеры появились 1 января 1970 года?

Повторение проблемы

1970-01-01 не является чем-то новым для разработчиков.Если некоторые системы плохо обрабатывают время, они могут отображать время как 1970-01-01, поэтому пользователи часто видят на этот раз 1970-01-01.

Эту ситуацию на самом деле очень просто воспроизвести, когда мы пытаемся определить время, используя следующий код Java:

Date date = new Date(0);
System.out.println(date);

Результат распечатан:

Thu Jan 01 08:00:00 CST 1970

Через описание конструктора Date в Java Doc мы также можем получить некоторые подсказки:

Конструктор принимает указанное пользователем количество миллисекунд, например new Date(1000), что означает получение времени на 1000 миллисекунд дальше от «эпохи». В Java это время 1970 года, 00:00:00 по Гринвичу.

отметка времени

Все началось с рождения операционной системы Unix.

В августе 1969 года программист лаборатории Белла Кен Торон, оставив жену и детей в отпуске на месяц, приступил к созданию новой революционной операционной системы.Он использует язык B для компиляции на старой машине PDP-7.Разработал версию ЮНИКС.

Впоследствии Томпсон и его коллега Деннис Ритчи улучшили язык B, разработали язык C и переписали Unix, и новая версия была выпущена в 1971 году.

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

Поэтому временные метки Unix определяются путем сравнения текущего времени с «временем эпохи», а разница в секундах между ними используется в качестве временной метки.

Чтобы метки времени Unix представляли время как можно дольше, время рождения Unix, 1971-1-1, изначально было определено как «время эпохи».

Изменение метки времени

За исключением того, что время начала — 1971-1-1 вместо 1970-1-1, исходная метка времени меняется не каждую 1 секунду, а каждую 1/60 секунды.

Кроме того, Unix был изобретен в 1971 г. В то время компьютерная система имела разрядность 32. Если 32 используется для представления целого числа, то максимальное значение равно 2 147 483 647 (2 ^ 31-1).

Затем просто выполните математический расчет.Если время представлено методом расчета временной метки в то время, временная метка Unix может использоваться не более4294967296/(60*60*24)/60 = 828.5день (один день имеет60*60*24секунд, он будет занимать временную метку каждые 1/60 секунды).

Представьте себе разработку компьютерной системы, время которой может быть выражено только в 828,5 дней, это трудно принять, но первоначальный Unix действительно был таким.

Позже Unix-разработчики тоже постепенно поняли, что это не долгосрочное решение, и начали вносить изменения.

Первоначально они изменили временную метку, чтобы она менялась каждую 1/60 секунды, чтобы изменять временную метку каждую 1 секунду. Таким образом, время, которое может представлять метка времени, увеличивается еще в 60 раз. В это время есть828.5*60/365 = 136год.

В это время, с одной стороны, 136 лет достаточно долго, да и время эпохи немного сдвинуто вперед, и это мало влияет. С другой стороны, для удобства запоминания и использования.

Таким образом, время эпохи было скорректировано с 1 января 1971 года на 01 января 1970 года.

Поэтому с рождением различных языков разработки позже последовала установка 1970-1-1.

Таким образом, отметка времени, на которую мы обычно ссылаемся, относится к общему количеству секунд с 00:00:00 1 января 1970 года по среднему времени по Гринвичу (GMT) до настоящего времени.

Время эпохи и часовой пояс

Все настройки времени эпохи, о которых мы упоминали ранее, основаны на среднем времени по Гринвичу, то есть времени по Гринвичу.

Но в каждом регионе мира есть свой часовой пояс, который нужно корректировать, исходя из времени по Гринвичу.

Отображение 1970-01-01 08:00:00 явно зависит от часового пояса«Как объяснить девушке, почему в Японии время на час быстрее, чем в Китае»Поскольку Китай находится в Восточном Восьмом округе, время будет на 8 часов раньше стандартного времени, которое должно быть 1970-01-01 00:00:00.

Многие должны помнить «эппловский «инцидент 1970 года». Несколько лет назад пользователь сети под ником vista980622 опубликовал на форуме иностранного сайта Reddit статью «Измените время iPhone на 1 января 1970 года, мобильный телефон — кирпичи навсегда». Почта.

Вскоре после того, как сообщение было опубликовано, многие люди не поверили ему и установили время на мобильном телефоне на 1 января 1970 г. В результате мобильный телефон выключился и перезагрузился, а он действительно стал кирпичным.

Поскольку мы находимся в Восточном Восьмом округе, время на 8 часов быстрее, чем стандартное время.Если мы настроим время на 1970-01-01 00:00:00, то стандартное время будет на 8 часов меньше, чем это время, то есть декабрь 1969 года. 31 января в 16:00:00.

Однако устройство iOS основано на часовой поясе UTC (Time GMT) в 0:00:00 1 января 1970 года, а значение равно 0. Пользователь регулирует время до 16:00:00 31 декабря 1969 года. , Система собирается иметь негативное время.

Версия системы — от IOS 8.0 до IOS 9.3 beta3, и устройства Apple, оснащенные 64-разрядными процессорами (т. е. устройства с процессорами A7-A9X), вызовут эту ошибку, что приведет к зависанию!



Использованная литература:

http://en.wikipedia.org/wiki/Unix_time#History

http://mobile.zol.com.cn/569/5691666_all.html