Моя система відображала такий час, як 10:42, коли я вводив команду
date +%R
. Мені потрібно зайняти загальну кількість хвилин. Це означає, як це 642 хвилини. Чи є сценарій команди або оболонки для відображення загального часу в хвилинах?
Моя система відображала такий час, як 10:42, коли я вводив команду
date +%R
. Мені потрібно зайняти загальну кількість хвилин. Це означає, як це 642 хвилини. Чи є сценарій команди або оболонки для відображення загального часу в хвилинах?
Відповіді:
Щоб отримати лише загальну хвилину дня, я використовую таку команду:
$ date "+%H*60+%M" | bc
Приклад:
$ date +%R
09:30
$ date "+%H*60+%M" | bc
570
Хитрість полягає в тому, щоб відформатувати date
вихід, щоб дозволити bc
інтерпретувати та обчислювати формулу.
zsh
date "+%H*60+%M" | bc
працює так само добре. Напевно, майже в будь-якій оболонці.
просто баш:
IFS=: read hour min < <(date +%R)
echo $(( 60 * 10#$hour + 10#$min ))
Примушуючи обидві змінні вважати базовими-10, щоб уникнути помилок підкидання оболонки для невірних восьмеричних чисел 08
та09
echo $(( $(date "+%k * 60 + 10#%M") ))
це я хотів сказати
Використання 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 (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
IFS=: set -- $(date +%T); echo $1
повертається 08:16:52
- вам знадобитьсяIFS=:; set ...
Вам не потрібно використовувати IFS, ви можете це зробити так:
date=$(date +'%l:%M')
read H M <<< ${date//[-: ]/ }
echo "Total minutes: $(($H * 60 + $M))"
вихід:
Total minutes: 593
bash: 9 17*60+: syntax error in expression (error token is "17*60+")
echo $(date +"%H*60+%M") | bc
, він працює також у zsh;)