¿Cómo puedo tomar el total de minutos del tiempo?

8

Mi sistema mostraba la hora como esta 10:42 cuando ingresé el comando date +%R. Necesito tomar minutos totales del tiempo. Eso significa así 642 minutos. ¿Hay algún comando o script de shell para mostrar el tiempo total en minutos?

Dinesh Dhananjayan
fuente

Respuestas:

11

Para obtener solo los minutos totales del día, usaría el siguiente comando:

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

Ejemplo:

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

El truco consiste en formatear la datesalida para permitir bcinterpretar y calcular la fórmula.

Sylvain Pineau
fuente
2
Si lo usa echo $(date +"%H*60+%M") | bc, también funciona en zsh;)
AB
@AB Un día cambiaré azsh
Sylvain Pineau
1
date "+%H*60+%M" | bcfunciona igual de bien también Probablemente en casi cualquier caparazón.
Trauma digital
@ Digital Trauma: Simple, gracias. He actualizado mi respuesta en consecuencia.
Sylvain Pineau
5

solo bash:

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

Obligar a ambas variables a ser tratadas como base-10, para evitar los errores de lanzamiento de shell para números octales no válidos 08y09

Glenn Jackman
fuente
Sí, echo $(( $(date "+%k * 60 + 10#%M") ))es lo que quise decir
Trauma digital
1
Sí, nada de malo en eso. Tal vez mi respuesta es un poco más ... instructivo
glenn jackman
3
date +%R | awk -F ":" '{print ($1 * 60) + $2}'

O

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

date +%l obtendrá las horas, se multiplicará por 60 y agregará minutos date +%M

7171u
fuente
2

Usando datey bash:

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

Ejemplo

$ 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

Usando datey el z-shell (zsh):

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

Ejemplo

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

% IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"
520
AB
fuente
1
@DineshDhananjayan ¿Estaba satisfecho con mi respuesta? Entonces dame un voto a favor (∧). Si pudiera resolver su problema, sería bueno que marcara mi respuesta (✓). askubuntu.com/help/someone-answers ;)
AB
1
No creo que su respuesta zsh sea correcta: IFS=: set -- $(date +%T); echo $1devoluciones 08:16:52- necesitaráIFS=:; set ...
glenn jackman
@glennjackman Ups y gracias, corregido. : \
AB
1

No necesita usar IFS, puede hacerlo de esta manera:

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

la salida es:

Total minutes: 593
Maythux
fuente
He corregido tu respuesta. El mensaje de error fuebash: 9 17*60+: syntax error in expression (error token is "17*60+")
AB