come posso prendere minuti totali dal tempo?


8

Il mio sistema ha visualizzato l'ora in questo modo 10:42 quando ho inserito il comando date +%R. Ho bisogno di prendere in totale minuti del tempo. Ciò significa che 642 minuti. Esistono comandi o script shell per la visualizzazione del tempo totale in minuti?

Risposte:


11

Per ottenere solo i minuti totali del giorno, utilizzare il seguente comando:

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

Esempio:

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

Il trucco è formattare l' dateoutput per consentire bcdi interpretare e calcolare la formula.


2
Se usi echo $(date +"%H*60+%M") | bc, funziona anche in zsh;)
AB

@AB Un giorno passerò azsh
Sylvain Pineau il

1
date "+%H*60+%M" | bcfunziona altrettanto bene. Probabilmente in quasi ogni shell.
Trauma digitale,

@DigitalTrauma: semplice, grazie. Ho aggiornato la mia risposta di conseguenza.
Sylvain Pineau,

5

bash:

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

Costringere entrambe le variabili a essere trattate come base-10, per evitare gli errori di lancio della shell per numeri ottali non validi 08e09


Sì, echo $(( $(date "+%k * 60 + 10#%M") ))è quello che intendevo dire
Digital Trauma,

1
Sì, niente di sbagliato in questo. Forse la mia risposta è un po 'più ... istruttiva
glenn jackman,

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

O

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

date +%l otterrà le ore, si moltiplicherà per 60 e aggiungerà minuti date +%M


2

Utilizzando datee bash:

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

Esempio

$ 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

Utilizzando datee una z-shell (zsh):

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

Esempio

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

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

1
@DineshDhananjayan Sei stato soddisfatto della mia risposta? Quindi dammi un voto (∧). Se potessi risolvere il tuo problema, sarebbe bello se tu segnassi la mia risposta (✓). askubuntu.com/help/someone-answers ;)
AB

1
Non credo che la tua risposta zsh sia corretta: IFS=: set -- $(date +%T); echo $1ritorna 08:16:52- ti serviràIFS=:; set ...
glenn jackman,

@glennjackman Ups e grazie, corretto. : \
AB

1

Non è necessario utilizzare IFS, puoi farlo in questo modo:

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

l'output è:

Total minutes: 593

Ho corretto la tua risposta. Il messaggio di errore erabash: 9 17*60+: syntax error in expression (error token is "17*60+")
AB
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.