Часы RTC экономят время в CMOS-памяти с батарейным питанием (в настоящее время это просто более интегрированный чип, имитирующий старые модели). Карта памяти CMOS довольно стандартна на ПК-совместимых компьютерах. В соответствии с этими картами памяти CMOS:
00h Seconds (BCD 00-59, Hex 00-3B) Note: Bit 7 is read only
01h Second Alarm (BCD 00-59, Hex 00-3B; "don't care" if C0-FF)
02h Minutes (BCD 00-59, Hex 00-3B)
03h Minute Alarm (BCD 00-59, Hex 00-3B; "don't care" if C0-FF))
04h Hours (BCD 00-23, Hex 00-17 if 24 hr mode)
(BCD 01-12, Hex 01-0C if 12 hr am)
(BCD 81-92. Hex 81-8C if 12 hr pm)
05h Hour Alarm (same as hours; "don't care" if C0-FF))
06h Day of Week (01-07 Sunday=1)
07h Date of Month (BCD 01-31, Hex 01-1F)
08h Month (BCD 01-12, Hex 01-0C)
09h Year (BCD 00-99, Hex 00-63)
Так что это простая математическая математика для преобразования этих полей в любой формат, который вам нравится: метки времени Unix, формат даты / времени типа DOS или любой другой.
Обратите внимание, что одно поле, отсутствующее на карте выше, это часовой пояс и настройка летнего времени. Так что, если вы используете двойную загрузку, скажем, Windows и Linux, у вас могут возникнуть проблемы. В Windows по умолчанию используется местный часовой пояс, в то время как в Linux обычно предполагается, что дата / время RTC указывается в формате UTC (что, на мой взгляд, более разумно).