[bcn-pm] trabajando con fechas

Jose Luis Perez Diez jluisaescomposlinux.org
Dij Abr 3 08:41:57 PDT 2008


El Thursday, 3 de April de 2008 13:11:45 Arnau Bria va escriure:
> Hola,
>
> tengo que parsear un fichero en el que tengo una cantidad de horas
> expresadas así: HH:MM:SS.
> Quiero coger esa fecha, y factorizarla, es decir, multiplicarla
> dividirla por un factor y volver a representarla como estaba.


Yo con tantas respuestas y a un no se lo que quieres, por si acaso he escrito 
este programa test.bcpm 
que me da la siguente salida
/\ 01:00:00  = 01:00:00
origen     GMTSun Mar 30 01:00:00 2008
resultado  GMTSun Mar 30 02:00:00 2008
origen     CETSun Mar 30 03:00:00 2008
resultado  CETSun Mar 30 04:00:00 2008
1.5*(01:00:00)=01:30:00
/\ 00:30:00  = 00:30:00
origen     GMTSun Mar 30 01:00:00 2008
resultado  GMTSun Mar 30 01:30:00 2008
origen     CETSun Mar 30 03:00:00 2008
resultado  CETSun Mar 30 03:30:00 2008
1.5*(00:30:00)=00:45:00
/\ 00:00:30  = 00:00:30
origen     GMTSun Mar 30 01:00:00 2008
resultado  GMTSun Mar 30 01:00:30 2008
origen     CETSun Mar 30 03:00:00 2008
resultado  CETSun Mar 30 03:00:30 2008
1.5*(00:00:30)=00:00:45
/\ 24:00:00  = 00:00:00
origen     GMTSun Mar 30 01:00:00 2008
resultado  GMTMon Mar 31 01:00:00 2008
origen     CETSun Mar 30 03:00:00 2008
resultado  CETMon Mar 31 03:00:00 2008
1.5*(00:00:00)=12:00:00
-------------- següent part --------------
use strict;
use warnings;
use POSIX qw(mktime strftime);

my $DST2008 = mktime(0,0,2,30,2,108);#localtime

sub GetHMS{
    my $entrada = shift;
    die "bad data $entrada" unless ($entrada =~ /(\d\d):(\d\d):(\d\d)/);
# Alternativa:
#   consideramos las horas en formato 1-24:
#      las 24:01:30 solo son 90 segundos y
#      las 24:00:00 son 86400 segundos
#     
#   die "$entrada has an invalid  24h format" unless ($1);
#   die "$entrada is not normaized " unless ($2 >= 60 or $3 >=60)
#   my $MS = $2*60+$3;
#   if ($MS) {
#       return (($1%24)*60+$2)*60+$3
#   }else{
#       return $1*3600;
#   }	
    return ($1*60+$2)*60+$3;

}

sub PutHMS {
    my $entrada = shift;
    return strftime("%H:%M:%S",gmtime($entrada));
}

foreach my $delta ("01:00:00","00:30:00","00:00:30","24:00:00") {
     print "/\\ $delta  = ".PutHMS(GetHMS($delta))."\n";
     print "origen     GMT".gmtime($DST2008)."\n";
     print "resultado  GMT".gmtime($DST2008 + GetHMS($delta)) ."\n";
     print "origen     CET".localtime($DST2008)."\n";
     print "resultado  CET".localtime($DST2008 + GetHMS($delta) )."\n";
     print "1.5*(". PutHMS(GetHMS($delta)).")=". PutHMS( 1.5*((((GetHMS($delta)*3)/7)/3)*7 ))."\n";

}


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