KucKucK: Die Zeitverschiebung oder Die geheimen Tage

Beitrag lesen

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;
}