Apa cara terbaik untuk mengkonversi antara tanggal, jam, menit, detik ke cap waktu Unix dalam milidetik di Arduino? Saya perlu memiliki konversi ini, karena saya menggunakan RTC (tanggal, jam, menit, detik, dll) dan mengkomunikasikan stempel waktu Unix melalui BLE
Saya menemukan beberapa potongan kode online, tetapi belum mengujinya secara ekstensif.
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;
Dan untuk mengkonversi ke cap waktu Unix:
unsigned long epoch = (((year/4*(365*4+1)+days[year%4][month]+dayOfMonth)*24+hour)*60+minute)*60+second;
Apakah ada perpustakaan di Arduino yang mengimplementasikan ini? Saya akan menukar keandalan dengan ukuran program.
Ada cara standar untuk melakukan konversi di C, yaitu melalui fungsi yang didefinisikan dalam
<time.h>
. API ini menjadi standar, Anda dapat mengujinya di komputer Anda. Versi terbaru dari avr-libc mendukung ini: lihat time.h di avr-libc . Fungsi-fungsi ini dapat menangani waktu setempat jika Anda menyediakan fungsi yang menerapkan aturan DST: lihatset_dst()
. Contoh disediakan untuk aturan AS dan UE.sumber
Berikut ini contoh untuk mengonversi detik (waktu Unix) ke Tanggal & Waktu menggunakan TimeLib.h:
sumber
Setengah kompiler c yang layak akan memiliki serangkaian tipe dan rutinitas terkait waktu untuk menangani hal ini. Konsultasikan dengan manual compiker Anda untuk lebih spesifik.
Btw, bertentangan dengan kebijaksanaan konvensional, Anda tidak perlu dll untuk melacak waktu. Penghitung waktu lama yang lebih baik plus kode Anda akan berhasil.
sumber