Thread POSIX::mktime erzeugt je nach System unterschiedliche Werte (18 answers)
Opened by Hagen at 2011-01-09 16:51

Hagen
 2011-01-09 16:51
#144353 #144353
User since
2007-09-06
233 Artikel
BenutzerIn
[default_avatar]
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
Anfang: '29.10.2011 08:30'
Time: '1319869800' (0/30/08/29/9/111)
TZ: 'CET/CEST'


System 2:
Quote
Anfang: '29.10.2011 08:30'
Time: '1319873400' (0/30/08/29/9/111)
TZ: 'CET/CEST'


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

View full thread POSIX::mktime erzeugt je nach System unterschiedliche Werte