Как мне найти секунды с полуночи?


11

Используя dateпрограмму, как я могу рассчитать количество секунд с полуночи?


1
дата "+ (% H * 60 +% M) * 60 +% S" | до н.э.
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}должен убирать начальные 0, которые в некоторых оболочках нравятся 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
Чороба
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.