Gece yarısından bu yana nasıl saniye bulabilirim?


11

dateProgramı kullanarak, gece yarısından bu yana geçen saniye sayısını nasıl hesaplayabilirim?


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

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

Yanıtlar:


14

Yarış koşullarından kaçınmak için hala GNU tarihi varsayıyor:

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

İle zsh, dahili olarak yapabilirsiniz:

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

Taşınabilir bir şekilde, gün ışığından yararlanma anahtarının olmadığı zaman dilimlerinde şunları yapabilirsiniz:

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

${X#0}Önde gelen bir kabukları gibi 0s şerit etmektir bash, dashve poshilgili sorunlara neden olan 09(kabuk geçersiz bir sekizlik şikâyetçi olduğu).


Eval

Bu çizgiler boyunca bir şey kullanmayı tercih ederim:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
x-yuri

7

Herhangi bir aritmetik ifadeye gerek yoktur, sadece saf tarih kullanın:

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

Harika cevap, ilk cevap olmalı.
Leopoldo Sanczyk

1
Mac'te brew install coreutilsve değiştirme dateilegdate
Connor McCormick

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.