На вывод hwclock влияет летнее время при входе в него, но не при выходе из него

Как насчет небольшого вырезания и вставки?

paste -d" " <(cut -d" " -f1 file1.txt) <(cut -d" " -f2 file2.txt) <(cut -d" " -f2- file1.txt)
1
30.08.2021, 09:29
1 ответ

Вы думаете, что hwclockотображает точное значение аппаратных часов в своих регистрах.

Это не так.

Доказательство:

# date; hwclock; TZ=UTC hwclock; grep rtc_time /proc/driver/rtc
Wed  1 Sep 18:33:18 EEST 2021
2021-09-01 18:33:18.870798+03:00
2021-09-01 15:33:18.981738+00:00
rtc_time        : 15:33:20

Обратите внимание, чем отличаются выходные данные hwclockи TZ=UTC hwclock?

hwclockотображает значение аппаратных часов , преобразованное в текущий часовой пояс по мере необходимости (, включая как смещение летнего времени, так и часовой пояс). Если вы хотите увидеть необработанное значение, вы должны использоватьcat /proc/driver/rtc:в зависимости от того, использует ли ваша система классический драйвер часов PC CMOS, интерфейс часов UEFI или какой-либо другой драйвер часов реального -времени -. может быть преобразование вtime_t(илиtime64_t)и обратно в процессе установки часов.

Вы также не используете параметры --utcи --localпри получении/настройке аппаратных часов, поэтому локальное/UTC-состояние аппаратных часов определяется третьей строкой файла /etc/adjtime, если это существует.


В первом тесте вы устанавливаете аппаратные часы, когда действует летнее время, поэтому смещение UTC равно -1 (UTC=local -1 час ). Если аппаратные часы настроены на использование местного времени, они будут установлены на 09 :59 :30, как и ожидалось.

Но если аппаратные часы настроены на использование UTC, фактическое значение, установленное в регистрах часов, будет 08:59 :30. Когда вы просматриваете часы до перехода на летнее время, это смещение равно автоматически возвращается hwclock, поэтому вы увидите 09 :59 :**, как и ожидалось.

Когда происходит переход с летнего времени, если аппаратные часы были установлены на местное время,регистр часов увеличится до значения 10 :00 :00. Поскольку это уже местное время, а смещение летнего времени в любом случае равно 0, hwclockбудет отображать его как 10 :00 :00.

Но если бы часы HW были установлены на время UTC, значение в регистрах часов теперь было бы 09 :00 :00. Поскольку после перехода на летнее время смещение UTC теперь равно 0, hwclockтакже будет отображать его как 09 :00 :00.

Часы ОС всегда работают в формате UTC и преобразуются в местное время в соответствии с правилами часового пояса и летнего времени, поэтому они будут отображать 09 :00 :00 (не -летнее время ), как и ожидалось..

Поскольку здесь вы получили результат hwclock10 :00 :00, третья строка вашего файла /etc/adjtimeдолжна содержать LOCAL.


Во втором тесте вы устанавливаете часы, когда летнее время не действует, поэтому общее смещение UTC равно 0. Теперь регистры часов будут установлены на 09 :59 :30 независимо от того, установите для использования UTC или местное время. Из предыдущего теста мы знаем, что у вас установлено местное время.

Когда наступает время перехода на летнее время, регистры часов HW будут читать 10 :00 :00... и поскольку значение регистра форматируется для отображения в соответствии с текущим часовым поясом, возникает проблема :согласно действующим правилам часового пояса 10 :00 :00 местное время сегодня не существует!

Из-за перехода на летнее время невозможно значение временной метки UTC, которое могло бы представлять значение 10 :00 :00 местного времени в этот особый день :09 :59 :59 UTC 09 :59 :59 местного времени, но 10 :00 :00 UTC — 11 :00 :00 местного времени. Когда значение времени проходит через glibcпроцедуры перевода и форматирования часового пояса, несуществующие -10 :00 :00 заменяются на 11 :00 :00.

Итак,если вы запрашиваете аппаратные часы в течение первого часа после перехода DST -на -стандартное -время,hwclockможет сообщить вам неправильное время , поскольку фактическое значение в регистрах часов не может быть представлено как допустимое значение местного времени. Это всего лишь артефакт отображения :/proc/driver/rtc, который должен показывать правильное значение даже в этот волшебный час.


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

Я закончу ссылкой на очень подходящее 10-минутное -видео YouTube Тома Скотта о компьютерном хронометраже. Я уверен, вы оцените вывод.

2
01.09.2021, 16:09

Теги

Похожие вопросы