Qual é a melhor maneira de converter entre data, horas, min e segundos para carimbo de data e hora do Unix em milissegundos no Arduino? Preciso ter essa conversão, pois estou usando o RTC (data, horas, min, segundos etc.) e comunicando o carimbo de data e hora do Unix pelo BLE
Encontrei um trecho de código online, mas ainda não o testei extensivamente.
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;
E para converter em carimbo de data / hora do Unix:
unsigned long epoch = (((year/4*(365*4+1)+days[year%4][month]+dayOfMonth)*24+hour)*60+minute)*60+second;
Existe alguma biblioteca no Arduino que implementa isso? Eu trocaria a confiabilidade pelo tamanho do programa.
Existe uma maneira padrão de fazer essas conversões em C, que é através das funções definidas em
<time.h>
. Como essa API é padrão, você pode testá-la no seu computador. Versões recentes do avr-libc suportam isso: consulte time.h no avr-libc . Essas funções podem lidar com a hora local se você fornecer uma função implementando as regras de horário de verão: consulteset_dst()
. Exemplos são fornecidos para as regras dos EUA e da UE.fonte
Aqui está um exemplo para converter segundos (hora do Unix) em Data e hora usando TimeLib.h:
fonte
Qualquer compilador c decente teria um conjunto de tipos e rotinas relacionadas ao tempo para lidar com isso. Consulte o manual do compiker para obter mais detalhes.
Btw, ao contrário da sabedoria convencional, você não precisa de um etc para acompanhar o tempo. Qualquer bom temporizador mais antigo, mais o seu código, serve.
fonte