Hallo,
bei meinem Programm kann ich durch eine Zeitverschiebung von einer Stunde vom 30.Juni Abends zum 31.Juni (anstatt zum 1.Juli) gelangen.
Ich verwende die Methode timegm, um das Datum in Linux Zeit umzurechnen. Dann füge ich meinen time shift hinzu. Im Anschluß konvertiere ich zurück mit gmtime (Umkehrfunktion von timegm). Das Resultat ist allerdings ein Datum, das es gar nicht gibt.
Kann mir bitte jemand sagen, wo mein (Denk-)fehler liegt ? Das Programm ist anbei. Danke und lieben Gruß,
KucKucK
#!/usr/bin/perl -w
use strict;
use Time::Local;
my $time = "2006-06-30 23:30:00";
my $shift= 60;
#extract date from line
$time =~ /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
#perform time shift
my $sec, my $min, my $hour, my $mday, my $mon, my $year, my $wday, my $ydat, my $isdst;
my $time_in_sec = timegm($6,$5,$4,$3,$2,$1);
print "\nTime in sec: ".$time_in_sec." = ".$time;
my $new_time_in_sec = $time_in_sec + 60 * $shift;
print "\nNew time in sec: ".$new_time_in_sec." = ";
($sec,$min,$hour,$mday,$mon,$year,$wday,$ydat,$isdst) = gmtime($new_time_in_sec);
#format output string
my $newDate = (($year+1900)."-".CD($mon)."-".CD($mday)." ".CD($hour).":".CD($min).":".CD($sec));
$time=~ s/\d{4}-\d{2}-\d{2}\ \d{2}:\d{2}:\d{2}/$newDate/;
print $newDate."\n";
correct date that the format can be used
input-param: digit
return: string using 2 digits
sub CD {
my $dateString = shift;
if (length($dateString)==1) {$dateString = "0".$dateString;}
return $dateString;
}