Mój system wyświetlił czas podobny do tego 10:42, kiedy wprowadziłem polecenie
date +%R
. Muszę wziąć w sumie minuty. To znaczy tak 642 minuty. Czy jest jakiś skrypt poleceń lub powłoki do wyświetlania całkowitego czasu w minutach?
Mój system wyświetlił czas podobny do tego 10:42, kiedy wprowadziłem polecenie
date +%R
. Muszę wziąć w sumie minuty. To znaczy tak 642 minuty. Czy jest jakiś skrypt poleceń lub powłoki do wyświetlania całkowitego czasu w minutach?
Odpowiedzi:
Aby uzyskać tylko całkowitą liczbę minut dnia, użyłbym następującego polecenia:
$ date "+%H*60+%M" | bc
Przykład:
$ date +%R
09:30
$ date "+%H*60+%M" | bc
570
Sztuką jest sformatowanie danych date
wyjściowych, aby umożliwić bc
interpretację i obliczenie formuły.
zsh
date "+%H*60+%M" | bc
działa równie dobrze. Prawdopodobnie w dowolnej powłoce.
po prostu bash:
IFS=: read hour min < <(date +%R)
echo $(( 60 * 10#$hour + 10#$min ))
Wymuszenie traktowania obu zmiennych jako podstawy-10, aby uniknąć błędów wyrzucania powłoki dla niepoprawnych liczb ósemkowych 08
i09
echo $(( $(date "+%k * 60 + 10#%M") ))
chciałem powiedzieć
Korzystanie date
i bash
:
eval "$(date +'today=%F now=%s')"; midnight=$(date -d "$today 0" +%s);echo "$(((now - midnight) / 60))"
Przykład
$ 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
Korzystanie date
i powłoka Z (zsh):
IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"
Przykład
% 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
zwraca 08:16:52
- będziesz potrzebowaćIFS=:; set ...
Nie musisz używać IFS, możesz to zrobić w ten sposób:
date=$(date +'%l:%M')
read H M <<< ${date//[-: ]/ }
echo "Total minutes: $(($H * 60 + $M))"
wyjście to:
Total minutes: 593
bash: 9 17*60+: syntax error in expression (error token is "17*60+")
echo $(date +"%H*60+%M") | bc
, działa również w zsh;)