Вячик13 0 5 февраля, 2013 Опубликовано 5 февраля, 2013 · Жалоба Задача - преобразовать количество секунд из RTC в строку даты и времени и обратное преобразование. Имеются ли в Keil стандартные функции для этих целей? Пример использования, если можно. Если нет, то поделитесь, пожалуйста, текстом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 5 февраля, 2013 Опубликовано 5 февраля, 2013 · Жалоба Задача - преобразовать количество секунд из RTC в строку даты и времени и обратное преобразование. Имеются ли в Keil стандартные функции для этих целей? Пример использования, если можно. Если нет, то поделитесь, пожалуйста, текстом. //----------------------------------------------------------------------------- // DWORD int_to_time(DWORD x, DWORD *hh, DWORD *mm, DWORD *ss) //----------------------------------------------------------------------------- DWORD int_to_time(DWORD x, DWORD *hh, DWORD *mm, DWORD *ss) { *ss = x % 60; x /= 60; *mm = x % 60; x /= 60; *hh = x % 24; x /= 24; return x; } //----------------------------------------------------------------------------- // DWORD date_to_int(DWORD y, DWORD m, DWORD d) //----------------------------------------------------------------------------- DWORD date_to_int(DWORD y, DWORD m, DWORD d) { if(m < 3) { m += 12; y -= 1; } return ((y * 1461) >> 2) + ((m * 306 + 7) / 10) + d - 730533; } //----------------------------------------------------------------------------- // void int_to_date(DWORD jd, DWORD *y, DWORD *m, DWORD *d) //----------------------------------------------------------------------------- void int_to_date(DWORD jd, DWORD *y, DWORD *m, DWORD *d) { int aa, bb, cc, dd, ee, mm, xx; aa = jd + 2483589; bb = (aa * 4 + 3) / 146097; cc = aa - ((146097 * bb) >> 2); dd = (4 * cc + 3) / 1461; ee = cc - ((1461 * dd) >> 2); mm = ((5 * ee + 2) * 13707) >> 21; *d = ee - ((16043274 * mm + 209716) >> 19) + 1; *m = mm + 3 - 12 * ((mm * 27) >> 8); *y = 100 * bb + dd - 4800 + ((mm * 27) >> 8); } Корректно работает от 2000 до 2099 годов включительно. Начало эпохи 01.01.2000 00:00:00. Примеры // установка rtc_set_datetime(((date_to_int(dt->YYYY, dt->MM, dt->DD) * 24 + dt->hh) * 60 + dt->mm) * 60 + dt->ss); // считывание if(rtc_get_datetime(&datetime)) { datetime = int_to_time(datetime, &hh, &mm, &ss); int_to_date(datetime, &y, &m, &d); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Вячик13 0 5 февраля, 2013 Опубликовано 5 февраля, 2013 · Жалоба Спасибо, подходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hamster1979 0 16 февраля, 2013 Опубликовано 16 февраля, 2013 · Жалоба зачем изобретать велосипед? time_t как раз лучше всего для этого. Смотрите <time.h> Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться