Цитата(Вячик13 @ Feb 5 2013, 11:08)

Задача - преобразовать количество секунд из 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);
}