Как лучше всего конвертировать дату, часы, минуты, секунды в метку времени Unix в миллисекундах в Arduino? Мне нужно это преобразование, так как я использую RTC (дата, часы, минуты, секунды и т. Д.) И передаю метку времени Unix через BLE
Я нашел в Интернете какой-то фрагмент кода, но пока не тестировал его.
byte second = epoch%60; epoch /= 60;
byte minute = epoch%60; epoch /= 60;
byte hour = epoch%24; epoch /= 24;
unsigned int years = epoch/(365*4+1)*4; epoch %= 365*4+1;
unsigned int year;
for (year=3; year>0; year--)
{
if (epoch >= days[year][0])
break;
}
unsigned int month;
for (month=11; month>0; month--)
{
if (epoch >= days[year][month])
break;
}
year = years+year;
month = month+1;
unsigned int day = epoch - days[year][month]+1;
unsigned int weekday = (dayOfMonth += month < 3 ? year-- : year - 2, 23*month/9 + dayOfMonth + 4 + year/4- year/100 + year/400)%7;
И преобразовать в метку времени Unix:
unsigned long epoch = (((year/4*(365*4+1)+days[year%4][month]+dayOfMonth)*24+hour)*60+minute)*60+second;
Есть ли в Arduino библиотека, которая это реализует? Я бы обменял надежность на размер программы.
Существует стандартный способ сделать эти преобразования в C, который заключается в использовании функций, определенных в
<time.h>
. Этот API является стандартным, вы можете проверить его на своем компьютере. Последние версии avr-libc поддерживают это: см. Time.h в avr-libc . Эти функции могут обрабатывать местное время, если вы предоставляете функцию, реализующую правила DST: смset_dst()
. Примеры приведены для правил США и ЕС.источник
Вот пример для преобразования секунд (время Unix) в дату и время, используя TimeLib.h:
источник
Любой полуприличный c-компилятор будет иметь набор связанных со временем типов и подпрограмм для решения этой проблемы. Консультируйтесь со своим руководством compiker для большего количества деталей.
Кстати, вопреки общепринятому мнению, вам не нужно и т.д., чтобы следить за временем. Подойдет любой хороший старый таймер плюс ваш код.
источник