Отсюда:
Проверено:
const unsigned char numofdays[12]={31,28,31,30,31,30,31,31,30,31,30,31};
void UNIXToDate(unsigned int utc){
struct RTC* rtc = & rtcVar;
unsigned int n,d,i;
rtc->sec = (unsigned char)(utc % 60); utc /= 60;
rtc->min = (unsigned char)(utc % 60); utc /= 60;
rtc->hour = (unsigned char)(utc % 24); utc /= 24;
rtc->wday = (unsigned char)((utc + 4) % 7);
rtc->year = (unsigned int)(1970 + utc / 1461 * 4); utc %= 1461;
n = ((utc >= 1096) ? utc - 1 : utc) / 365;
rtc->year += n;
utc -= n * 365 + (n > 2 ? 1 : 0);
for (i = 0; i < 12; i++) {
d = numofdays[i];
if (i == 1 && n == 2) d++;
if (utc < d) break;
utc -= d;
}
rtc->month = (unsigned char)(1 + i);
rtc->mday = (unsigned char)(1 + utc);
}
/////// Фрагмент с winAPI для отображения
void UNIXToDate(unsigned int utc){
struct RTC* rtc = & rtcVar;
unsigned int n,d,i;
rtc->sec = (unsigned char)(utc % 60); utc /= 60;
rtc->min = (unsigned char)(utc % 60); utc /= 60;
rtc->hour = (unsigned char)(utc % 24); utc /= 24;
rtc->wday = (unsigned char)((utc + 4) % 7);
rtc->year = (unsigned int)(1970 + utc / 1461 * 4); utc %= 1461;
n = ((utc >= 1096) ? utc - 1 : utc) / 365;
rtc->year += n;
utc -= n * 365 + (n > 2 ? 1 : 0);
for (i = 0; i < 12; i++) {
d = numofdays[i];
if (i == 1 && n == 2) d++;
if (utc < d) break;
utc -= d;
}
rtc->month = (unsigned char)(1 + i);
rtc->mday = (unsigned char)(1 + utc);
}
/////// Фрагмент с winAPI для отображения
inWindow = GetDlgItem(hwndDlg,4001);
GetWindowText(inWindow, txt, 20);
Seconds = atoi(txt);
UNIXToDate(Seconds);
inWindow = GetDlgItem(hwndDlg,4002);
wsprintf(txt,"%d:%d:%d %d.%d.%d",rtcVar.hour,rtcVar.min,rtcVar.sec,rtcVar.mday,rtcVar.month,rtcVar.year);
SetWindowText(inWindow,txt);
///-------------------------------
Прога
Прога