как я могу взять общее количество минут от времени?

8

Моя система показала время, подобное этому 10:42, когда я ввел команду date +%R. Мне нужно взять всего минут времени. Это означает, что это 642 минуты. Есть ли какая-либо команда или сценарий оболочки для отображения общего времени в минутах?

Динеш Дхананджаян
источник

Ответы:

11

Чтобы получить только общее количество минут за день, я использовал бы следующую команду:

$ date "+%H*60+%M" | bc

Пример:

$ date +%R
09:30
$ date "+%H*60+%M" | bc
570

Хитрость заключается в том, чтобы отформатировать dateвывод, чтобы позволить bcинтерпретировать и вычислить формулу.

Сильвен Пино
источник
2
Если вы используете echo $(date +"%H*60+%M") | bc, он работает также в Zsh;)
AB
@AB Однажды я переключусь наzsh
Сильвен Пино
1
date "+%H*60+%M" | bcработает так же хорошо. Вероятно, в любой оболочке.
Цифровая травма
@DigitalTrauma: Просто, спасибо. Я обновил свой ответ соответственно.
Сильвен Пино
5

просто bash:

IFS=: read hour min < <(date +%R)
echo $(( 60 * 10#$hour + 10#$min ))

Принудительное обращение с обеими переменными как с базой-10, чтобы избежать ошибок при генерации оболочки для недопустимых восьмеричных чисел 08и09

Гленн Джекман
источник
Да, echo $(( $(date "+%k * 60 + 10#%M") ))это то , что я хотел сказать
Цифровая травма
1
Да, в этом нет ничего плохого. Может быть, мой ответ немного больше ... учебный
Гленн Джекман
3
date +%R | awk -F ":" '{print ($1 * 60) + $2}'

Или

 echo $((($(date +%l) * 60 ) + $(date +%M)))

date +%l получите часы, умножьте на 60 и добавьте минуты date +%M

7171u
источник
2

Использование dateи bash:

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

пример

$ date
Fr 10. Jul 08:45:05 CEST 2015

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

Используя dateи z-shell (zsh):

IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"

пример

% date
Fr 10. Jul 08:40:53 CEST 2015

% IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"
520
AB
источник
1
@DineshDhananjayan Вы были удовлетворены моим ответом? Тогда дай мне голос (∧). Если бы я мог решить вашу проблему, было бы хорошо, если бы вы отметили мой ответ (✓). askubuntu.com/help/someone-answers ;)
AB
1
Я не думаю , что ваш ЗШ ответ правильный: IFS=: set -- $(date +%T); echo $1возвращается 08:16:52- вам нужноIFS=:; set ...
Glenn Джекман
@glennjackman Спасибо и спасибо, исправлено. : \
AB
1

Вам не нужно использовать IFS, вы можете сделать это следующим образом:

date=$(date +'%l:%M')
read H M <<< ${date//[-: ]/ }
echo  "Total minutes: $(($H * 60 + $M))"

вывод:

Total minutes: 593
Maythux
источник
Я исправил ваш ответ. Сообщение об ошибке былоbash: 9 17*60+: syntax error in expression (error token is "17*60+")
AB