[bcn-pm] trabajando con fechas

Arnau Bria arnauaemergetux.net
Div Abr 4 01:44:33 PDT 2008


On Thu, 03 Apr 2008 17:41:57 +0200
Jose Luis Perez Diez wrote:

Hola!

> Yo con tantas respuestas y a un no se lo que quieres, por si acaso he
:-) gracias por tu interés!

Yo quiero pasar unas horas:minutos:segundo a segundos. Sin importarme
al fecha.
Es decir, si tengo 48:00:00 (48 horas, 0 minutos y 0 segundos) me
devuelva que eso son 172800 segundos. Yo entonces multiplicaré,
dividiré, lo que fuere, esos segundos y volveré a pasarlos a
horas:minutos:segundos, es decir, 14:59:59 (en ese caso).

La solución que me dio bruno (Clock.pm) me iba de perlitas, pero el
reloj sólo es de 23:59:59, y mis horas pueden llegar a 72:00:00.

Y las funciones que me pasó Salvador me funcionan bien. Bueno, de echo
hay una cosa que no entiendo, y aprovecho para comentarlo aquí. la
última linea:
sprintf("%02d:%02d:%02d", $s / 3600, ($s / 60) % 60, $s % 3600);

debería dejarme dos numeros por campo, no? (el %02d), pues bien, en los
segundo me deja hasta 4 núemros.
Si le paso 48:00:00 me devuelve 14:59:3578.
Yo lo he cambiado a:

 sprintf("%02d:%02d:%02d", $hours,$minutes,$seconds);

donde cada campo es la división:
  my $hours=$s/3600;
  my $minutes=($s/60)%60;
  my $seconds=(($s/60)%60)%60;

y así me sale bien:
14:59:59

Porque pasa eso?

y otra sobre las funciones. 
sub myfmt2seconds {
  my $t = shift;
  $t =~ /^(\d+):(\d+):(\d+)$/ or die "formato raro";
  $t=$1 * 3600 + $2 * 60 + $3;
}
porque esta función retorna $t si no lo especificas? he estado leyendo
varios manuales y siempre pone el return...
si hubiera $t y $s, habría que especificar? retorna el último cálculo?


salu2 y gracias por todo!

-- 
Arnau Bria
http://blog.emergetux.net
Bombing for peace is like fucking for virginity


Més informació de la llista de correu Barcelona-pm