Як я знаходжу секунди з півночі?


11

Як користуватися dateпрограмою, як я можу обчислити кількість секунд з півночі?


1
дата "+ (% H * 60 +% M) * 60 +% S" | bc
groxxda

1
echo $ (($ (дата '+ (% H * 60 +% M) * 60 +% S')))
groxxda

Відповіді:


14

Щоб уникнути перегонових умов, все ж припускаючи дату GNU:

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

З zsh, ви можете зробити це всередині країни :

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

Портативно, у часових поясах, де немає перемикача літнього часу, ви можете:

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

${X#0}Є смуга провідних 0s , які в деяких оболонках подобається bash, dashі poshпроблеми викликають з 09(де оболонка скаржиться , що є неприпустимим вісімкове число).


Дуже розумний та вдалий користувач eval
Ульріх Дангел,

Я вважаю за краще використовувати щось у цьому напрямку:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
x-yuri


2

Виходячи з bash, отримати поточний час в мілісекундах з півночі , в системі GNU, це можна зробити так:

$ now=$(date '+%s')
$ midnight=$(date -d 'today 00:00:00' '+%s')
$ echo $(( now - midnight ))
53983

2
Ви хочете переконатися, що цього не зробите о 23:59:59
Стефан Шазелас,

І щоб перетворити назад:date -d @$seconds
choroba
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.