Samx (20.11.2019 17:23, просмотров: 251) ответил Лагунов на а как по простому вычислить текущее время в формате unixtime (народ просит)? Т.е. есть стандартная дата и время от RTC (год, месяц, день, час, минута). Как-то лень все года складывать с 1970-го. :-)
Вот тянутое из какой-то ардуиновской библиотеки для DS3231. Вроде правильно работает:-)
#ifdef CONFIG_UNIXTIME
__flash unsigned char days_in_month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
// returns the number of seconds since 01.01.1970 00:00:00 UTC, valid for 2000..FIXME
u32_t get_unixtime(struct ts t)
{
u8_t i;
u16_t d;
s16_t y;
u32_t rv;
if (t.year >= 2000) {
y = t.year - 2000;
} else {
return 0;
}
d = t.mday - 1;
for (i=1; i<t.mon; i++) {
d += days_in_month[i-1];
}
if (t.mon > 2 && y % 4 == 0) {
d++;
}
// count leap days
d += (365 * y + (y + 3) / 4);
rv = ((d * 24UL + t.hour) * 60 + t.mins) * 60 + t.sec + SECONDS_FROM_1970_TO_2000;
rv -= UTC_OFFSET;
return rv;
}
#endif