[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