• Publicidad

Cálculo de horas y minutos

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Cálculo de horas y minutos

Notapor manuel_cfe » 2006-12-20 16:01 @709

Hola a todos
Tengo este código:

Código: Seleccionar todo
sub convierte_tiempo{
   $t = substr($_[0], 0, length($_[0]));
   $u = substr($_[1], 0, length($_[1]));
   $f1= ParseDate($t); # me da esto: 2006121913:12:00
   $f2= ParseDate($u); # me da esto: 2006121814:16:00
   print "Esta es la f1: $f1 " ;
   print "Esta es la f2: $f2 " ;
   $diferencia = DateCalc($f2, $f1,\$err);
   $horas = Delta_Format($diferencia,2,"%ht"); # me da esto: 22.93


Me da 22 horas pero quiero que los minutos no me los de en decimales sino en minutos reales.

Es decir, debería de ser 22 hrs 55.8 mins

¿Hay algún formato de Delta_Format que me lo de en automático?

Gracias
manuel_cfe
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2006-12-20 15:52 @702

Publicidad

Notapor explorer » 2006-12-20 19:01 @834

Bienvenido a los foros de Perl en Español.

Mira los ejemplos que hay en
viewtopic.php?t=804&start=15

En cuanto a Delta_Format, sí se puede hacer directamente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -l
use Date::Manip;

$diferencia = DateCalc("2006121814:16:00", "2006121913:12:00");
$dif = Delta_Format($diferencia,2,"%hv horas %mv minutos");
print $dif; # 22 horas 56.00 minutos
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Como ves, hace un redondeo del valor de minutos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor manuel_cfe » 2006-12-21 12:51 @577

Excelente sabia que si se iba a poder...

Ahora tengo otro problemilla, ya que este código lo tengo en un ciclo, esa diferencia quiero irla acumulando en el mismo formato

Código: Seleccionar todo
#!/usr/bin/perl -l
use Date::Manip;

$diferencia = DateCalc("2006121814:16:00", "2006121913:12:00");
$horas= Delta_Format($diferencia,2,"%hv horas %mv minutos");
print $horas; # 22 horas 56.00 minutos
$horas2 =($horas2)+($horas); # Asi quiero acumularlo 32 horas 20.00 minutos


¿Cómo le hago o que instrucción debo de usar para sumar horas y minutos?

Gracias de antemano
manuel_cfe
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2006-12-20 15:52 @702

Notapor explorer » 2006-12-21 13:37 @609

Yo creo que te vale con simplemente ir sumando en la variable objeto delta de Date::Manip. Es decir, vas sumando las deltas y sólo al final es cuando haces la conversión a horas/minutos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor manuel_cfe » 2006-12-21 14:00 @625

explorer

Créeme que desde que posteé esto tengo el problema aun. Tu respuesta es muy obvia para ti, ya que veo que dominas muy bien esta función de fechas, pero créeme lo he intentado y no me sale, puedes darme un ejemplo de código o mejor aun, no me des pescado, enséñame a pescar.

Gracias por tu tiempo
manuel_cfe
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2006-12-20 15:52 @702

Notapor explorer » 2006-12-21 19:59 @874

A ver... yo no domino nada... lo que hago es siempre consultar la documentación. En este caso, de Date::Manip. Y luego hacer pruebas, muchas pruebas.

Vamos a poner un ejemplo de acumulación de valores delta (lapsos de tiempo).
Este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    1 #!/usr/bin/perl -l
    2
    3 use Date::Manip;
    4
    5 @fechas = qw(
    6   2006121814:16:00
    7   2006121815:36:10
    8   2006121816:09:04
    9   2006121818:16:34
   10   2006121821:26:40
   11   2006121823:01:00
   12 );
   13
   14 for ( $i=1; $i<@fechas; $i++ ) {
   15   $diferencia = DateCalc( $fechas[$i-1], $fechas[$i] );
   16   $horas      = DateCalc( $horas,        $diferencia );
   17   print Delta_Format($diferencia,0,"%hv horas %mv minutos %sv segundos");
   18 }
   19 print "Total:";
   20 print Delta_Format($horas,0,"%hv horas %mv minutos %sv segundos");
   21
   22 print Delta_Format(DateCalc($fechas[0], $fechas[-1]),0,"%hv horas %mv minutos %sv segundos");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Esto es lo que hace:
* En la línea 5 definimos las @fechas que vamos a usar. Queremos calcular la diferencia entre cada par de fechas.
* El bucle de la línea 14 a 18 recorre los valores de 1 al último índice posible de @fechas. Es decir, no empezamos en 0.
* En la línea 15 hallamos la $diferencia (delta) de tiempo entre el tiempo $i-ésimo y el anterior.
* En $horas vamos a ir acumulando todas las diferencias. En la línea 16 volvemos a usar la misma función DateCalc. En este ocasión, DateCalc toma a $horas como una delta (de valor 0 al principio) y $diferencia como otra delta, por lo que entonces la operación que realiza es la suma y da como resultado otra delta, que vamos dejando acumulado en $horas.
* La línea 17 nos sirve para mostrarnos la delta que hemos calculado un par de líneas antes.
* Finalmente, en la línea 20 pintamos la suma de todas las deltas.
* Como comprobación, vamos a pintar, en la línea 22, la diferencia entre la primera fecha y la última, para ver que, efectivamente, coincide con el resultado anterior.

La salida es:
Código: Seleccionar todo
1 horas 20 minutos 10 segundos
0 horas 32 minutos 54 segundos
2 horas 7 minutos 30 segundos
3 horas 10 minutos 6 segundos
1 horas 34 minutos 20 segundos
Total:
8 horas 45 minutos 0 segundos
8 horas 45 minutos 0 segundos
Comentar finalmente que es siempre más recomendable usar el paquete DateTime para todo lo relacionado con Fechas y Tiempos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados