як я можу взяти час від загальної кількості хвилин?


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працює так само добре. Напевно, майже в будь-якій оболонці.
Digital Trauma

@DigitalTrauma: Просто, дякую. Я відповідно оновив свою відповідь.
Sylvain Pineau

5

просто баш:

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

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


Так, echo $(( $(date "+%k * 60 + 10#%M") ))це я хотів сказати
Digital Trauma

1
Так, нічого поганого в цьому немає. Можливо, моя відповідь трохи більше ... повчальна
glenn jackman

3
date +%R | awk -F ":" '{print ($1 * 60) + $2}'

Або

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

date +%l отримаємо години, помножимо на 60 і додамо хвилин date +%M


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 (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

1
@DineshDhananjayan Ви були задоволені моєю відповіддю? Тоді дайте мені висновок (∧). Якби я міг вирішити вашу проблему, було б непогано, якщо ви позначите мою відповідь (✓). askubuntu.com/help/someone-answers ;)
AB

1
Я не вважаю, що ваша відповідь zsh правильна: IFS=: set -- $(date +%T); echo $1повертається 08:16:52- вам знадобитьсяIFS=:; set ...
glenn jackman

@glennjackman Піднімається і дякую, виправлено. : \
AB

1

Вам не потрібно використовувати 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+")
AB
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.