Как ведет себя Unix Epoch на скачкообразных часах? - PullRequest
2 голосов
/ 02 июля 2019

Рассмотрим машину, время которой размазывается в течение високосной секунды линейным мазком от полудня к полудню.

Мне интересно, как системные часы обеспечивают точное время эпохи в течение периода мазка.

Пример:

  • Дополнительная секунда запланирована на 31 декабря 2016 года.

  • На компьютере отметка времени Unix в 11:59:00 31 декабря составляет 1483185540

  • В полдень начинается смазывание, что означает, что локальные часы системы в 13:30 уже отстают на несколько микросекунд от TAI и UTC. Отметка времени Epoch должна быть 1483191000 (ровно через 1 час 31 минуту), что больше не соответствует TAI / UTC, поскольку Epoch не учитывает високосные секунды
  • В 12 вечера по UTC добавляется дополнительная секунда: 11:59:60 вечера, локальные размазанные часы должны продолжать нормально
  • До того момента, когда в полдень 1 января глобальная UTC и локальная UTC снова синхронизируются, локальные часы эпохи теперь на целую секунду отстают от глобальной эпохи / TAI

Как разрешается эта неточность? Местное время эпохи пропускает секунду, когда система узнает, что произошла високосная секунда? Или как решить эту проблему?
Зависит ли это от реализации часов, используемых для расчета времени? Если да, то как GNU coreutils date справляется с этим?

1 Ответ

3 голосов
/ 02 июля 2019

Неточность не устранена. Unix Time остается счетчиком секунд с 1970-01-01 00:00:00 UTC, за исключением вставленных високосных секунд. Это дает преимущество в том, что счетчик секунд легко преобразовать в форму {year, month, day, hour, minute, second}.

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

...