jak mogę wziąć całkowite minuty od czasu?

8

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?

Dinesh Dhananjayan
źródło

Odpowiedzi:

11

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 datewyjściowych, aby umożliwić bcinterpretację i obliczenie formuły.

Sylvain Pineau
źródło
2
Jeśli używasz echo $(date +"%H*60+%M") | bc, działa również w zsh;)
AB
@AB Pewnego dnia przestawię się nazsh
Sylvain Pineau,
1
date "+%H*60+%M" | bcdziała równie dobrze. Prawdopodobnie w dowolnej powłoce.
Cyfrowa trauma
@DigitalTrauma: Proste, dzięki. Zaktualizowałem odpowiednio swoją odpowiedź.
Sylvain Pineau,
5

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 08i09

Glenn Jackman
źródło
Tak, echo $(( $(date "+%k * 60 + 10#%M") ))chciałem powiedzieć
Digital Trauma,
1
Nie ma w tym nic złego. Może moja odpowiedź jest trochę bardziej ... instruktażowa
glenn jackman
3
date +%R | awk -F ":" '{print ($1 * 60) + $2}'

Lub

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

date +%l dostanie godziny, pomnóż przez 60 i dodaj minuty date +%M

7171u
źródło
2

Korzystanie datei 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 datei 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
AB
źródło
1
@DineshDhananjayan Czy jesteś zadowolony z mojej odpowiedzi? W takim razie daj mi głos (∧). Gdybym mógł rozwiązać twój problem, byłoby miło, gdybyś zaznaczył moją odpowiedź (✓). askubuntu.com/help/someone-answers ;)
AB
1
Nie sądzę, aby twoja odpowiedź na zsh była poprawna: IFS=: set -- $(date +%T); echo $1zwraca 08:16:52- będziesz potrzebowaćIFS=:; set ...
glenn jackman
@glennjackman Ups i dziękuję, poprawione. : \
AB
1

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
Maythux
źródło
Poprawiłem twoją odpowiedź. Komunikat o błędzie brzmiał:bash: 9 17*60+: syntax error in expression (error token is "17*60+")
AB