Thread POSIX::mktime erzeugt je nach System unterschiedliche Werte
(18 answers)
Opened by Hagen at 2011-01-09 16:51
Hallo,
in meinem Skript soll das aktuelle Datum, welches der Benutzer eingibt, als UTC-Zeit in einer MySQL-DB gespeichert werden (Ausschnitt bzw. Test-Skript im Problem-Teil): Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 use strict; use POSIX qw(mktime tzset); print "Content-type: text/html\n\n"; my $anfang_in = '29.10.2011 08:30'; print "Anfang: '$anfang_in'<br>"; my ($dd, $dm, $dy, $th, $tm, $ts) = split(/[\.: ]/, $anfang_in); $dm = $dm - 1; $dy = $dy - 1900; $ts = 0; my $time = mktime($ts, $tm, $th, $dd, $dm, $dy); print "Time: '$time' ($ts/$tm/$th/$dd/$dm/$dy)<br>"; my ($isdst) = (localtime($time))[-1]; if ($isdst) { $time = $time - 2*60*60; } else { $time = $time -1*60*60; } # else ($ts, $tm, $th, $dd, $dm, $dy) = (localtime($time))[0..5]; $anfang = sprintf("%04d.%02d.%02d %02d:%02d:%02d", $dy + 1900, $dm + 1, $dd, $th, $tm, $ts); my ($std, $dst) = POSIX::tzname(); print "TZ: '$std/$dst'<br>"; Leider sind die Ergebnisse je nach System (lokal/online) unterschiedlich und ich habe noch nicht so ganz herausgefunden warum bzw. wo ein entsprechender Parameter fehlt. System 1: Quote System 2: Quote D.h. hier gibt es eine Zeitdifferenz von 1h. Erster Gedanke war ein Fehler bzgl. den Zeitzonen, aber tzname hat auf beiden Systemen den gleichen Wert. Ich wäre auch offen für eine bessere/einfacherer Lösung, wie man die Zeit nach UTC-Zeit konvertieren kann (Modul?). Bisher habe ich (noch) nichts gefunden. Last edited: 2011-01-09 17:00:26 +0100 (CET) Gruß
Hagen |