Bagaimana saya menemukan detik sejak tengah malam?


11

Dengan menggunakan dateprogram ini, bagaimana saya bisa menghitung jumlah detik sejak tengah malam?


1
tanggal "+ (% H * 60 +% M) * 60 +% S" | bc
groxxda

1
echo $ (($ (tanggal '+ (% H * 60 +% M) * 60 +% S')))
groxxda

Jawaban:


14

Untuk menghindari kondisi balapan, masih dengan asumsi tanggal GNU:

eval "$(date +'today=%F now=%s')"
midnight=$(date -d "$today 0" +%s)
echo "$((now - midnight))"

Dengan zsh, Anda dapat melakukannya secara internal:

zmodload zsh/datetime
now=$EPOCHSECONDS
strftime -s today %F $now
strftime -rs midnight %F $today
echo $((now - midnight))

Mudah dibawa, di zona waktu di mana tidak ada sakelar hemat siang hari, Anda bisa melakukan:

IFS=:
set -- $(date +%T)
echo "$((${1#0} * 3600 + ${2#0} * 60 + ${3#0}))"

The ${X#0}adalah untuk melucuti 0s terkemuka yang dalam beberapa kerang seperti bash, dashdan poshmenyebabkan masalah dengan 09(di mana shell mengeluh tentang hal itu menjadi bilangan oktal valid).


Penggunaan sangat pintar dan baik eval
Ulrich Dangel

Saya lebih suka menggunakan sesuatu di sepanjang baris ini:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
x-yuri

7

Tidak perlu untuk ekspresi aritmatika, cukup gunakan tanggal murni:

date -d "1970-01-01 UTC $(date +%T)" +%s

Jawaban yang bagus, harus menjadi yang teratas.
Leopoldo Sanczyk

1
Di Mac brew install coreutilsdan ganti datedengangdate
Connor McCormick

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.