Как насчет небольшого вырезания и вставки?
paste -d" " <(cut -d" " -f1 file1.txt) <(cut -d" " -f2 file2.txt) <(cut -d" " -f2- file1.txt)
Вы думаете, что 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 (не -летнее время ), как и ожидалось..
Поскольку здесь вы получили результат hwclock
10 :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 Тома Скотта о компьютерном хронометраже. Я уверен, вы оцените вывод.