ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
385745 Топик полностью
SciFi (06.02.2013 21:56 - 21:58, просмотров: 77) ответил Гудвин на Никто не поделится функциями вычисления даты и времени из unix time (int32) для "Цэ"? Не монстрообразными, чтобы зарядить в мелкоконтроллер, с учетом високосных годов и пр...
Я выпилил из newlib, ЕМНИП: #define SECSPERMIN 60L #define MINSPERHOUR 60L #define HOURSPERDAY 24L #define SECSPERHOUR (SECSPERMIN * MINSPERHOUR) #define SECSPERDAY (SECSPERHOUR * HOURSPERDAY) #define DAYSPERWEEK 7 #define MONSPERYEAR 12 #define YEAR_BASE 1900 #define EPOCH_WDAY 1 #define EPOCH_YEARS_SINCE_LEAP 2 #define EPOCH_YEARS_SINCE_CENTURY 70 #define EPOCH_YEARS_SINCE_LEAP_CENTURY 370 #define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0) static const uint8_t mon_lengths[2][MONSPERYEAR] = { {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} } ; static const int year_lengths[2] = { 365, 366 } ; void seconds2tm(uint32_t sec, struct tm* res) { long days, rem; int y; int yleap; const uint8_t *ip; days = sec / SECSPERDAY; rem = sec % SECSPERDAY; /* compute hour, min, and sec */ res->tm_hour = (int) (rem / SECSPERHOUR); rem %= SECSPERHOUR; res->tm_min = (int) (rem / SECSPERMIN); res->tm_sec = (int) (rem % SECSPERMIN); /* compute day of week */ if ((res->tm_wday = ((EPOCH_WDAY + days) % DAYSPERWEEK)) < 0) { res->tm_wday += DAYSPERWEEK; } /* compute year & day of year */ y = YEAR_BASE; if (days >= 40542) /* days in years 1900..2010 inclusive */ { days -= 40542; y += 111; } if (days >= 0) { for (;;) { yleap = isleap(y); if (days < year_lengths[yleap]) { break; } y++; days -= year_lengths[yleap]; } } else { do { --y; yleap = isleap(y); days += year_lengths[yleap]; } while (days < 0); } res->tm_year = y - YEAR_BASE; res->tm_yday = days; ip = mon_lengths[yleap]; for (res->tm_mon = 0; days >= ip[res->tm_mon]; ++res->tm_mon) { days -= ip[res->tm_mon]; } res->tm_mday = days + 1; }
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้