csh para obtener la diferencia entre la hora de inicio y finalización de ambas entradas en formato hh:mm:ss

csh para obtener la diferencia entre la hora de inicio y finalización de ambas entradas en formato hh:mm:ss

./script.csh 05:25:00 02:30:50

debería devolver la salida en minutos

Dado que estoy recorriendo la serie de forma recursiva, cómo comparar valores con un nuevo valor grande. haría | ¿Trabajar en CSH?

Respuesta1

Para la diferencia completa:

perl -e 'for(@ARGV){s/(..):(..):(..)/$1*3600+$2*60+$3/e} $_=(shift)-(shift); printf"%02d:%02d:%02d\n",$_/3600,$_/60%60,$_%60' 05:25:00 02:30:50

Por diferencia en minutos:

perl -e 'for(@ARGV){s/(..):(..):(..)/$1*3600+$2*60+$3/e} $_=(shift)-(shift); printf"%d\n",$_/60' 05:25:00 02:30:50

También funciona en bash.

Respuesta2

No está claro si desea que las dos fechas coincidan con días o si supone que ambas son el mismo día y pueden estar en cualquier orden.

Esta respuesta supone la primera, es decir, timediff 23:00:00 01:00:00debería devolver 2 horas = 120 minutos.

Cambie @ s = 86400 + $sa @ s = - $ssi eso debería devolver 22 horas = 79200 minutos.

alias timediff 'set t=(\!:*:gs/:/ * 3600 + /:gs/:/ * 60 + /:q);\\
   @ s = ($t[2]) - ($t[1]); if($s < 0) @ s = 86400 + $s;\\
   @ m = $s / 60;\\
   @ H = $s / 3600 M = $s % 3600 / 60 S = $s % 60;\\
   echo seconds=$s minutes=$m hours=$H\:$M\:$S'

timediff 05:25:00 02:30:50
seconds=75950 minutes=1265 hours=21:5:50

Como guión:

set t=($argv:gs/:/ * 3600 + /:gs/:/ * 60 + /:q)
@ s = ($t[2]) - ($t[1]); if($s < 0) @ s = 86400 + $s
@ m = $s / 60
@ H = $s / 3600 M = $s % 3600 / 60 S = $s % 60
echo seconds=$s minutes=$m hours=$H\:$M\:$S

información relacionada