2013-05-14 4 views
19

Что касается Unix (POSIX) время, Wikipedia говорит:время и високосные Unix секунд

Благодаря его обработки високосных секунд, она не является ни линейным представлением времени, ни истинное представление UTC.

Но команда Unix date, кажется, не знать о них на самом деле

$ date -d '@867715199' --utc 
Mon Jun 30 23:59:59 UTC 1997 
$ date -d '@867715200' --utc 
Tue Jul 1 00:00:00 UTC 1997 

В то время как должно быть скачок второй там Mon Jun 30 23:59:60 UTC 1997.

Означает ли это, что только команда date игнорирует скачки секунд, тогда как концепция времени Unix нет?

+7

На странице http://www.madore.org/~david/computers/unix-leap-seconds.html есть приятное описание utc/tai. – loreb

+1

На этой странице объясняется, как операционные системы должны иметь дело со скачкообразной информацией от ntp , https://www.meinbergglobal.com/english/info/leap-second.htm#os –

ответ

16

Число секунд в день фиксированное с Unix timestamps.

В Unix, число раз, равно нулю в эпоху Unix, и увеличивается на точно 86400 в день с начала эпохи.

Поэтому он не может представлять секунды прыжка. ОС будет замедлять часы, чтобы приспособиться к этому. Секунд прыжка просто не существует, поскольку это касается временных меток Unix.

+0

Разве это не определение концепции * оригинала * времени Unix, или, во всяком случае, то, что в настоящее время является временем Unix на основе TAI , что является «чистым линейным числом секунд, прошедшим с 1970-01-01T00: 00: 00 TAI' (и день TAI фиксируется до 86400 с). ? – Campa

+0

День имеет 86400 в любом случае. Разница в том, что ваша система игнорирует тот факт, что на орбите есть реальная земля или нет (т.фиксирует продолжительность дня). Второй случай - общий. –

+0

Хорошо, но UTC не игнорирует орбиту Земли, и с одной стороны вы указываете, что время Unix фиксировано на 86400 с в день, а с другой, и я цитирую, что время Unix обрабатывает прыжки секунд. ? – Campa

16

Unix-время прост в работе, но некоторые временные метки не являются реальными временами, а некоторые временные метки не уникальные.

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

Обоснование времени unix: оно определено так, что с ним легко работать. Добавление поддержки для прыжков в стандартные библиотеки очень сложно. Например, вы хотите представить 1 января 2050 года в базе данных. Никто не знает, сколько секунд осталось в UTC! Дата не может быть сохранена как временная метка UTC, потому что IAU не знает, сколько секунд мы должны будем добавить в следующие десятилетия (они так же хороши, как и случайные). Итак, как программист может выполнить арифметику даты, когда время, которое пройдет между любыми двумя датами в будущем, не известно до года или двух раньше? Время Unix прост: мы знаем метку времени от 1 января 2050 года (а именно, 80 лет * # в секундах в год). UTC очень сложно работать круглый год, в то время как время unix с трудом работает в тот момент, когда происходит прыжок.

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

+0

что вы имеете в виду, что время Unix - это просто * работать с?На странице Википедии говорится, что «временная шкала Unix изначально была предназначена для простого линейного представления времени, прошедшего с момента эпохи», но затем комитет POSIX решил синхронизировать его с шкалой времени UTC, следовательно * с * прыжковыми секундами , если я правильно понимаю. ? – Campa

+1

Нет, время unix никогда не имеет секунд прыжка. Это _synced_ с UTC, то есть, отметки времени unix в тот же момент, когда UTC тикает: второй имеет точно такую ​​же длину, и они выстраиваются в линию. Иногда, когда время unix тикает, хотя его значение увеличивается на два, тогда как UTC только поднимается на один. Время Unix является массовым, массово проще, чем любая система со скачкообразными секундами, потому что секунды прыжка являются общей шуткой. –

+1

Простите, глупая ошибка в последнем комментарии. Третье предложение должно гласить: «Иногда, когда время unix тикает, хотя его значение повторяется в предыдущую секунду, тогда как UTC только когда-либо поднимается на один». –

Смежные вопросы