Сделал часы с автоматической коррекцией времени. Часы имеют обычный двенадцати часовой циферблат со стрелками. Соответственно время можно переводить либо вперед, либо назад.
Эталонное время получаю из интернета или RTC в формате HH:MM:SS .
Пока придумал такой алгоритм:
Вычисляю разницу в секундах, ели число положительное, значит, часы отстают и стрелки нужно перевести вперед, если разница отрицательная – то назад. Так как циферблат двенадцати часовой, нужно привести время к соответствующему формату.
Код: Выделить всё
/*
s – текущее время, секунды
m – текущее время, минуты
h – текущее время, часы
ss – эталонное время, секунды
mm – эталонное время, минуты
hh – эталонное время, часы
*/
if (h > 12) h = h - 12; // привести к 12 часовому виду
if (hh > 12) hh= hh - 12;
long sec = (ss - s) +
(mm - m) * 60L +
(hh - h) * 3600L;
long rev = 43200L - sec ; // направление + по часовой - против
if (rev < sec ) sec =-rev; // куда ближе крутить стрелки
Вроде все работает. (уже неделю =))
Может, есть другие алгоритмы или идеи?


