Автор: Querto
Дата: 24.11.15 20:42
Добрый день!
Время храниться в регистрах: [0x404b] [0x404c] [0x404d]
[0x404b] [0x404c] - время от 01.01.1900 00:00:00, выраженное в секундах
[0x404d] - значение миллисекунд
! при переводе времени нужно учитывать високосный год, причем, если текущий год високосный, то в феврале текущего года будет 28 дней, а не 29 (не знаю, может в последних версиях прошивок исправили).
Если год високосный, то он будет без остатка делиться на 4, например:
1900 /4 = 475 => 1900 високосный
1901 /4 = 475,25 => 1901 не високосный
Високосный год периодически повторяется (1 раз в 4 года), возьмем интервал [366, 365, 365, 365] - данный интервал повторяется, а последний может быть не полным.
Посчитаем, сколько секунд в среднем году, в данном интервале:
(366+365+365+365)/4 = 365,25 - дней в 1-ом среднем году
365,25*24*60*60 = 31557600 - сек. в 1-ом среднем году
Ваши значения:
0x404b = 55680 => HEX => 0x404b = 0xD980
0x404с = 5917 => HEX => 0x404с = 0x171D
Записываем как одно число из 4 байт: 0xD980171D => DEC => 3649050397 (сек.) - это время как раз и нужно перевести.
Посчитаем количество лет от 1900 года:
3649050397 / 31557600 = 115,63142941795320303191624204629 лет (115 + 1900, получаем, 2015 год)
остаток от деления - значение, выраженное в годах, содержащее [сутки:часы:минуты:секунды]
Посчитаем количество суток(дней) от начала 2015 года:
0,63142941795320303191624204629 * 365,25 = 230,62959490740740740740740740741 дней
остаток - значение, выраженное в днях, содержащее [часы:минуты:секунды]
230 дней: количество дней с января по июль включительно 212 => 230 -212 = 18 августа
Посчитаем количество часов от начала 18 августа:
0,62959490740740740740740740741 * 24 = 15,110277777777777777777777777778 часов
остаток - значение, выраженное в часах, содержащее [минуты:секунды]
Посчитаем количество минут после 15 часов:
0,110277777777777777777777777778 * 60 = 6,6166666666666666666666666666667 минут
остаток - значение, выраженное в минутах, содержащее [секунды]
Посчитаем количество секунд:
0,6166666666666666666666666666667 * 60 = 37 (ровненько :-) )
Миллисекунды хранятся в отдельном регистре:
0x404d = 425
Итоговое значение:
18 августа 2015 15:06:37.425
:-) проще простого
|
|