Почему время Unix начинается в 1970-01-01?

Ответы:

28

Я не знал бы ответ, кроме Google был там для меня:

Из Здесь (требуется бесплатная подписка):

Linux следует традиции, установленной Unix, считая время в секундах с его официального «дня рождения», называемого «эпохой» в вычислительном выражении, - 1 января 1970 года.

Более полное объяснение можно найти в этой статье Wired News . Это объясняет, что ранние инженеры Unix выбрали эту дату произвольно, потому что им нужно было установить единую дату для начала времени, и Новый год, 1970 год, казался наиболее удобным.

Ханан Н.
источник
5

Unix не родился в 1970 году.

Эпоха Unix наступила в полночь 1 января 1970 года . Важно помнить, что это не «день рождения» Unix - грубые версии операционной системы были примерно в 1960-х годах. Вместо этого дата была запрограммирована в системе где-то в начале 70-х годов только потому, что это было удобно делать, по словам Денниса Ритчи, одного из инженеров, который работал над Unix в Bell Labs с самого начала.

Дэнни А
источник
Удобно тогда, неудобно для разработчиков во всем мире с тех пор.
Крис Холкроу
3
@ChrisHalcrow: что бы вы выбрали в качестве времени 0, если бы вы были DMR? А чем неудобен выбор для разработчиков? Неудобство заключается в том, что измерение времени в «человеческих» терминах (годы, месяцы, дни, часы / минуты / секунды, часовые пояса, дневное время) является сложным, а не потому, что был выбран некоторый (произвольный) момент $ t = 0 $.
Ник
@NickD, хорошая подсказка для объяснения и хороший момент! Я бы выбрал 00:00:00 из CE 0, так как я уверен, что это немного облегчит вычисление. Пожалуйста, объясните, что такое «DMR»? Кроме того, по иронии судьбы тот факт, что ОП требует объяснения того, почему была выбрана эта дата, показывает, что кому-то непонятно, как использовать 01.0170 в качестве контрольной даты!
Крис Холкроу
2
@ChrisHalcrow: dmr = Деннис Ритчи. Вы рассчитали количество секунд от выбранного вами источника до сегодняшнего дня? Сколько бит это требует? PDP-11 имел 16-битные регистры и слова, но он позволял вам сгруппировать два регистра и два слова, чтобы сделать 32-битные регистры и двойные слова для некоторых операций. Это дает вам +/- 68 лет с вашего 0 времени (или +136 лет, если ваше время не было подписано - но dmr выбрал подписано). Его выбор может быть немного загадочным, когда вы впервые видите его, но это довольно очевидное решение, учитывая вышесказанное ...
NickD
1
@NickD - отличное объяснение! Это должно быть частью принятого ответа - почему бы не переместить ваш комментарий туда, а мы можем удалить наш здесь?
Крис Холкроу
1

Мне нравится вопрос :-)

Позвольте мне попытаться ответить на это (конечно источник: интернет)

Unix Time представлен 32-битным целым числом (целое число), которое может быть положительным или отрицательным (со знаком). Unix был изначально разработан в 60-х и 70-х годах, поэтому «начало» Unix Time было установлено на 1 января 1970 года в полночь по Гринвичу (время по Гринвичу) - этой дате / времени было присвоено значение Unix Time, равное 0. Это то, что известно как эпоха Unix.

32-разрядное целое число со знаком может представлять целые числа от -2147483648 до 2147483647. Поскольку Unix Time начинается с 0, отрицательные значения Unix Time возвращаются во времени с начала эпохи, а положительные числа переходят во времени. Это означает, что Unix Time простирается от значения Unix Time -2147483648 или 20:45:52 GMT 13 декабря 1901 года до значения Unix Time 2147483647 или 3:14:07 GMT 19 января 2038 года. Эти даты представляют начало, предыстория и конец Unix Time.

Конец Unix Time наступит 19 января 2038 года 03:14:07 по Гринвичу. 19 января 2038 года 03:14:08 GMT все компьютеры, которые все еще используют 32-битное Unix Time, будут переполнены. Это известно как «проблема 2038 года». Некоторые считают, что это будет более серьезной проблемой, чем «проблема 2000 года». Решение проблемы 2038 года - хранить Unix Time в 64-битном целом числе. Это уже происходит в большинстве 64-битных операционных систем, но многие системы могут не обновиться к 2038 году.

Никхил Мулли
источник
5
Только один абзац этого фактически затрагивает вопрос, и это несколько неточно (эпоха была первоначально в 1971 году; она была перенесена позже)
Майкл Мрозек
1
Также см. En.wikipedia.org/wiki/Unix_time
Nikhil Mulley
1
Это верно, Майкл. Из Википедии: Самые ранние версии времени Unix имели 32-разрядное целое число, увеличивающееся с частотой 60 Гц, что было частотой системных часов на оборудовании ранних систем Unix. Значение 60 Гц все еще появляется в некоторых программных интерфейсах в результате. Эпоха также отличалась от текущей стоимости. В первом издании Руководства программиста Unix от 3 ноября 1971 года время Unix определяется как «время с 00:00:00, 1 января 1971 года, измеренное в шестидесятых секундах».
Nikhil Mulley
@Nikhil Я до сих пор не понимаю, почему 1970, только потому, что Unix был разработан в то время? Почему не 1960? или другой месяц другой день?
Храмовник
@Nikhil или это не имеет значения? Просто первый месяц первый день выглядит лучше, и это было сделано в 1971 году, так что 1970 тоже будет выглядеть лучше?
Тамплиер