NTP-серверы дают вам UTC (в формате секунд с 1900 года).Текущее время, это текущее время.На самом деле не имеет значения, сколько високосных секунд было, чтобы добраться туда.
Когда все усложняется, это когда добавляется високосная секунда.NTP объявит об этом в данный момент, и различные операционные системы делают различные внутренние действия, чтобы записать это, из-за их склонности сохранять время как «количество секунд с начала эпохи» - Linux и Windows не включают в себя дополнительные секунды, потому чтоэто сделало бы их рендеринг метки времени более сложным (сколько високосных секунд было?), и с ними нельзя иметь дело.Вместо этого они просто замедляют или ускоряют часы на некоторое время вокруг объявленной високосной секунды, поэтому вместо того, чтобы фактически записать это, они просто настраивают свое собственное количество секунд, чтобы рендеринг, который считается как временная метка, позже показался точным.
(Чего я не знаю, так это того, как ОС будет переопределять счетчик «не реально, но вроде секунд» из транзакции NTP, не зная, сколько високосных секунд вычитать; правка приветствуется.)
system_clock
дает вам счетчик секунд, который (на основных платформах) поступает прямо из ОС (например, time()
).
utc_clock
дает аналогичный счетчик секунд, но тот, который "настоящий".На таких основных платформах это обязательно должен быть system_clock
с дополнительными секундами, добавленными после факта.Эти исторические данные также поступают из системы, на самом деле какая-то база данных (хотя точный источник зависит от реализации).
В заключение, источники данных для этих двух часов (немного) разные, поэтому не возникает вопроса о том, могут ли они сосуществовать в одной системе.Но system_clock
, вероятно, поступает непосредственно из вашей операционной системы, а utc_clock
, вероятно, - нет.
Дальнейшее чтение