Was ist der beste Weg, um in Arduino zwischen Datum, Stunden, Minuten, Sekunden in Unix-Zeitstempel in Millisekunden zu konvertieren? Ich muss diese Konvertierung durchführen, da ich RTC (Datum, Stunden, Minuten, Sekunden usw.) verwende und Unix-Zeitstempel über BLE kommuniziere
Ich habe einige Codes online gefunden, sie aber noch nicht ausführlich getestet.
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;
Und um in einen Unix-Zeitstempel zu konvertieren:
unsigned long epoch = (((year/4*(365*4+1)+days[year%4][month]+dayOfMonth)*24+hour)*60+minute)*60+second;
Gibt es eine Bibliothek in Arduino, die dies implementiert? Ich würde die Zuverlässigkeit über die Größe des Programms austauschen.
Es gibt eine Standardmethode für diese Konvertierungen in C, die über die in definierten Funktionen erfolgt
<time.h>
. Da diese API Standard ist, können Sie sie auf Ihrem Computer testen. Neuere Versionen von avr-libc unterstützen dies: siehe time.h in avr-libc . Diese Funktionen können die Ortszeit verarbeiten, wenn Sie eine Funktion bereitstellen, die die Sommerzeitregeln implementiert: sieheset_dst()
. Beispiele für US- und EU-Vorschriften werden bereitgestellt.quelle
Hier ist ein Beispiel zum Konvertieren von Sekunden (Unix-Zeit) in Datum und Uhrzeit mithilfe von TimeLib.h:
quelle
Jeder halbwegs anständige c-Compiler hätte eine Reihe von zeitbezogenen Typen und Routinen, um damit umzugehen. Weitere Einzelheiten finden Sie in Ihrem Compiker-Handbuch.
Übrigens, im Gegensatz zu herkömmlicher Weisheit, brauchen Sie kein usw., um die Zeit im Auge zu behalten. Jeder gute ältere Timer und Ihr Code reichen aus.
quelle