Почему 01.01.1970 - «эпохальное время»?

456

Почему

1 января 1970 года 00:00:00

считать время эпохи ?

rahul
источник
21
Не уверен, почему кто-то думал, что это субъективно. Время эпохи - это стандартная схема отметок времени.
ConcernedOfTunbridgeWells
5
Сегодня это было 380 000 часов назад
mplungjan
21
Мы должны начать отсчитывать время с этой даты, поэтому сейчас мы находимся на 44-м году.
Леонардо Раеле
3
Сегодня, прямо сейчас, это 1499969999! Это всего лишь ок. 8 часов осталось!
Доктор Беко
1
@ LeonardoRaele Да! тогда, например, Вторая мировая война началась в 31 году нашей эры!
Сиаваш Мортазави

Ответы:

418

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

Позже системное время было изменено с приращением каждую секунду, что увеличило промежуток времени, который может быть представлен 32-разрядным целым числом без знака, примерно до 136 лет. Поскольку больше не было так важно выжимать каждую секунду из прилавка, эпоха была округлена до ближайшего десятилетия, таким образом становясь 1970-1-1. Надо полагать, что это считалось немного аккуратнее, чем 1971-1-1.

Обратите внимание , что 32-разрядное подписал целое , используя 1970-1-1 в качестве своей эпохи может представлять даты до 2038-1-19 , на какую дату он будет обернуть вокруг 1901-12-13.

Мэтт Хауэллс
источник
30
1/60 имеет какое-либо отношение к частоте американской сети?
xtofl
55
Это частота одного из генераторов на системных платах, используемых в то время. Генератору не нужно было использовать частоту 60 Гц, поскольку он работал на постоянном токе, но, вероятно, было дешево использовать то, что было наиболее распространенным в то время, и тогда телевизоры производились серийно ...
Мэтт Хауэллс
18
На самом деле, в то время было очень часто синхронизировать компьютерные часы и RTC с сигналом сети США, потому что он был (является?) Очень надежным. Это было умножено, чтобы получить часы процессора, и разделено, чтобы получить секунды для RTC.
Алексиос
12
@mafioso: Хорошо, я установлю напоминание на своем ноутбуке на 2038 год ... 1901-12-13.
18
@JediKnight Это предположение, основанное на моем собственном опыте разработчика: изменение стандарта требует времени, и если ваше изменение не вступит в силу, то вы в конечном итоге получите конкурирующие стандарты . Реальное решение проблемы эпохи - это 64-битные целые числа, не сдвигающие эпоху вперед во времени.
Джейк
51

История .

Самые ранние версии времени Unix имели приращение 32-разрядного целого числа со скоростью 60 Гц, что было частотой системных часов на оборудовании ранних систем Unix. Значение 60 Гц все еще появляется в некоторых программных интерфейсах в результате. Эпоха также отличалась от текущей стоимости. В первом издании Руководства программиста Unix от 3 ноября 1971 года время Unix определяется как «время с 00:00:00, 1 января 1971 года, измеренное в шестидесятых секундах секунды».

Стю Томпсон
источник
1
Время эпохи - 1 января 1970 года, а не 1 января 1971 года.
Стив Харрисон
10

http://en.wikipedia.org/wiki/Unix_time#History немного объясняет происхождение времени Unix и выбранную эпоху. Определение времени Unix и даты эпохи претерпело несколько изменений, прежде чем стабилизировалось на том, что есть сейчас.

Но это не говорит, почему именно 01.01.1970 был выбран в конце.

Известные выдержки из страницы Википедии:

В первом издании Руководства программиста Unix от 3 ноября 1971 года время Unix определяется как «время с 00:00:00, 1 января 1971 года , измеренное в шестидесятых секундах секунды».

Из-за ограниченного диапазона, эпоха была переопределена более одного раза , прежде чем частота была изменена на 1 Гц, и для эпохи было установлено ее текущее значение.

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

Дауи Штраус
источник
6

Эпоха справочной даты

Справочник эпохи дата является точкой на временной шкале , из которых мы отсчет времени. Моменты до этой точки считаются с отрицательным числом, моменты после - с положительным числом.

Много эпох в использовании

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

Нет, не эпоха, эпоха. Есть много эпох в использовании .

Этот выбор эпохи является произвольным .

Основные компьютерные системы и библиотеки используют любую из нескольких дюжин различных эпох . Одна из самых популярных эпох, известная как Unix Time , использует момент UTC 1970 года, который вы упомянули.

Хотя популярность Unix Time 1970 года и не является самыми распространенными. Кроме того, наиболее распространенными будут 0 января 1900 года для бесчисленных электронных таблиц Microsoft Excel и Lotus 1-2-3 или 1 января 2001 года, используемые каркасом Apple Cocoa на более чем миллиарде машин iOS / macOS по всему миру в бесчисленных приложениях. Или, может быть, 6 января 1980 года используются GPS- устройства?

Многие детали

Различные системы используют разную степень детализации при подсчете времени.

Даже так называемое «Unix Time» варьируется: некоторые системы считают целые секунды, а некоторые - миллисекунды . Многие базы данных, такие как Postgres, используют микросекунды . Некоторые, такие как современная инфраструктура java.time в Java 8 и более поздних версиях, используют наносекунды . Некоторые используют еще другие детали.

ISO 8601

Поскольку в использовании эталона эпохи и гранулярности существует так много различий, как правило, лучше избегать передачи моментов в виде отсчета от эпохи. Между неоднозначностью эпохи и гранулярностью, а также неспособностью людей воспринимать значимые значения (и, следовательно, пропускать ошибочные значения), используйте простой текст вместо цифр.

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

К ним относятся:

Василия Бурка
источник
-10

Краткий ответ: почему бы и нет?

Более длинный ответ: само время на самом деле не имеет значения, если каждый, кто его использует, согласен с его ценностью. Поскольку 1/1/70 использовался так долго, его использование сделает ваш код максимально понятным для максимально возможного числа людей.

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

PaulJWilliams
источник
37
Потому что Unix был разработан в 1969 году и впервые выпущен в 1971 году, и поэтому было разумно предположить, что ни одна машина не должна будет представлять системное время раньше, чем 1970-01-01-00: 00: 00.
Йорг Миттаг
3
Как разработчик исторических симуляторов, кажется довольно глупым, что разработчики некоторых объектов времени склонны считать, что все программы захотят представлять даты только в будущем или недавнем прошлом. Конечно, мы можем программировать наши собственные представления или работать с поправочным коэффициентом, но все же.
Дронц
8
Та же проблема до эпохи относится к «практическому» неигровому использованию, такому как бизнес-таблицы, представление научных данных, пользовательские интерфейсы машины времени и т. Д.
Lenoxus
7
@Dronz Вы должны принять во внимание, что это было разработано для компьютера за 72000 $ с 9 КБ ОЗУ, который использовал транзисторы и диоды для логических элементов в качестве процессора (никаких микросхем в то время!). Так что не было глупо делать самую основную вещь, которая работала.
Камило Мартин
2
ОП на мета-уровне верна, схемы, которые мы разрабатываем для времени, всегда были довольно произвольными. Количество дней в году, количество дней в месяце, год "0" и правила для високосного года ... сумасшедшие. Каждая система - это просто серия дурацких компромиссов, потому что это было лучшее, что они могли сделать с доступной технологией и работали достаточно хорошо для их непосредственного использования. Что верно для всех инженерных проектов
:)