Beberapa shell dapat melakukan pekerjaan tanpa memanggil date
perintah eksternal :
ksh
a=$(printf '%(%s)T\n'); printf '%(%Y.%m.%d %H:%M)T\n' "#$((a-a%(15*60)))"
bash a=$(printf '%(%s)T\n'); printf '%(%Y.%m.%d %H:%M)T\n' "$((a-a%(15*60)))"
zsh zmodload zsh/datetime; a=$EPOCHSECONDS; strftime '%Y-%m-%d %H:%M' $((a-a%(15*60)))
Tiga di atas menyediakan waktu lokal (bukan UTC). Gunakan TZ terkemuka = UTC0 jika perlu.
Sintaks ksh dan bash hampir identik (kecuali untuk yang diperlukan #
dalam ksh). Zsh perlu memuat modul (termasuk dengan distribusi zsh).
Dimungkinkan juga untuk melakukannya dengan (GNU) awk:
melongo awk 'BEGIN{t=systime();print strftime("%Y.%m.%d %H:%M",t-t%(15*60),1)}'
Ini memberikan hasil UTC (ubah yang terakhir 1
ke 0
) jika lokal diperlukan. Tetapi memuat awk eksternal atau modul zsh eksternal mungkin selambat tanggal panggilan itu sendiri:
gnu-date a=$(date +%s); date -ud "@$((a-a%(15*60)))" +'%Y.%m.%d %H:%M'
Seperti dieksekusi kecil busybox
dapat memberikan hasil yang serupa:
busybox-date a=$(busybox date +%s);busybox date -ud "@$((a-a%(15*60)))" +'%Y.%m.%d %H:%M'
Perhatikan bahwa kata busybox terkemuka dapat dihilangkan jika busybox ditautkan ke nama-nama tersebut dalam direktori PATH.
Kedua date
dan di busybox date
atas akan mencetak waktu UTC. Hapus -u
opsi untuk waktu lokal.
Jika OS Anda memiliki versi tanggal yang lebih terbatas (dan itulah yang harus Anda gunakan) maka cobalah:
a=$(date +%s); a=$(( a-a%(15*60) ))
date -d"1970-01-01 $a seconds UTC" +'%Y.%m.%d %H:%M'
Atau, jika di FreeBSD, coba:
a=$(date +%s); a=$(( a-a%(15*60) ))
date -r "$a" +'%Y.%m.%d %H:%M'