ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
959841 Топик полностью
Samx (20.11.2019 17:23, просмотров: 229) ответил Лагунов на а как по простому вычислить текущее время в формате 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