Saya menggunakan OpenWRT pada Arduino YUN dan saya mencoba untuk mendapatkan tanggal yang tepat dalam milidetik (DD/MM/YYYY h:min:sec:ms) dengan mendapatkan waktu oleh server waktu.
Sayangnya date +%N
baru saja mengembalikan %N
, tapi bukan nanodetik. Saya mendengar +%N
tidak termasuk dalam tanggal OpenWRT.
Jadi, apakah ada cara untuk mendapatkan tanggal (termasuk milidetik) seperti yang saya inginkan?
Jawaban yang Diterima:
Pada OpenWRT, date
adalah busybox
, yang memiliki keterbatasan, tetapi ini tidak sepenuhnya salah satunya. Masalah mendasarnya adalah libc (uClibc) tidak mendukung ekstensi strftime GNU ini. (Meskipun glibc juga tidak, lebih lanjut tentang itu di bawah.)
Anda harus memiliki lua
secara default, tetapi itu tidak akan membantu tanpa beberapa modul non-default lainnya.
hwclock
memanggil gettimeofday()
untuk membandingkan/mengatur RTC (jam perangkat keras), tetapi tidak akan menghasilkan resolusi sub-detik (mengakses RTC bisa cukup lambat sehingga mungkin tidak berguna). Selain itu OpenWRT hanya menyediakan rdate
kuno , yang hanya memiliki resolusi satu detik.
Tampaknya tidak ada cara langsung untuk mendapatkan stempel waktu yang akurat langsung dari /proc
, cap waktu yang paling berguna ada di /proc/timer_list
(baris ke-3) yang merupakan waktu aktif dalam nanodetik (resolusi akan tergantung pada platform).
Jika busybox Anda dibuat dengan CONFIG_BUSYBOX_CONFIG_ADJTIMEX
set, maka Anda harus dapat menggunakan adjtimex
untuk membaca jam kernel (meskipun perhatikan bahwa versi busybox memiliki keduanya argumen yang berbeda dan output yang berbeda dengan adjtimex standar.
Versi normal, adjtimex -p
, baris terakhir keluaran:
raw time: 1416419719s 146628us = 1416419719.146628
Versi busybox, adjtimex
(tanpa -p
!), 3 baris terakhir:
[...]
time.tv_sec: 1416420386
time.tv_usec: 732653
return value: 0 (clock synchronized)
Goldilocks's adalah solusi yang bagus, dengan asumsi Anda memiliki pengaturan lintas build OpenWRT Anda (sangat disarankan!).
coreutils-date Anda solusi berfungsi karena meskipun coreutils sadar akan glibc, itu tidak secara eksklusif glibc. Muncul dengan implementasi mandiri strftime
(berasal dari glibc), dan menggunakannya untuk membungkus (melalui strftime_case()
) strftime
yang mendasarinya untuk mendukung berbagai ekstensi (dan sebaliknya kembali ke versi uClibc).
Bahkan glibc (hingga 2.23 saat ini) tidak mendukung %N
, strftime()
core coreutils berasal dari versi glibc kanonik menambahkan %N
dan %:z
dan beberapa perubahan lainnya. Variasi dan versi patch dari strftime()
berlimpah (termasuk versi di bash dan gawk).