localtime() und Zeitzonen
Stefan Bion
- perl
Hi,
ich habe ein Forums-Script (http://www.vtf.de/forum1/) auf einem Ami-Server installiert, dessen Zeit um 9 Stunden vor der Deutschzeit liegt. Nun steht in SelfHTML, daß localtime() als Parameter einen Wert erwartet, der die seit dem 01.01.1970 vergangenen Millisekunden angibt. Demnach müßte localtime(time + 9 * 3600 * 1000) die Serverzeit + 9 Stunden zurückgeben, oder? Tutse aber nich... - localtime(time + 9 * 3600) dagegen funktioniert, was bedeutet:
[ ] localtime() erwartet als Parameter die seit dem 01.01.1970 vergangenen Sekunden
[ ] die Angabe in SelfHTML (Millisekunden) stimmt nicht und muß korrigiert werden
[ ] es liegt ein Verständnisfehler meinerseits vor
(Zutreffendes nach Belieben ankreuzen) ;-)
Gibt es außer dieser Methode, einen fixen Wert zu time hinzuzuaddieren, nicht noch einen 'eleganteren' Weg, die Zeitzone zu korrigieren?
Gruß,
Stefan
Hi Stefan!
[X] localtime() erwartet als Parameter die seit dem 01.01.1970 vergangenen Sekunden
[X] die Angabe in SelfHTML (Millisekunden) stimmt nicht und muß korrigiert werden
[ ] es liegt ein Verständnisfehler meinerseits vor
Selfhtml ist gut, aber nicht perfekt. Im Zweifelsfall also immer die Original-Perl-Doku zu Rate ziehen. Mit diesen Sekunden und Millisekunden kann man aber schon mal durcheinander kommen, denn das Date-Objekt in JavaScript rechnet in der Tat mit Millisekunden, und wenn man oft zwischen Perl und JS wechselt, passiert das eben.
Gibt es außer dieser Methode, einen fixen Wert zu time hinzuzuaddieren, nicht noch einen 'eleganteren' Weg, die Zeitzone zu korrigieren?
Mir ist nichts bekannt.
Bye, Calocybe
Hi,
Im Zweifelsfall also immer die Original-Perl-Doku zu Rate ziehen.
das ist so wichtig, daß ich es einfach noch mal zitiere :-)
Gibt es außer dieser Methode, einen fixen Wert zu time hinzuzuaddieren, nicht noch einen 'eleganteren' Weg, die Zeitzone zu korrigieren?
Mir ist nichts bekannt.
perldoc -f gmtime
und vermutlich auch
perldoc perllocale
(auch wenn ich jetzt spontan nichts gefunden habe... ich muß ins Bett :-) )
Cheatah
Hi!
Gibt es außer dieser Methode, einen fixen Wert zu time hinzuzuaddieren, nicht noch einen 'eleganteren' Weg, die Zeitzone zu korrigieren?
Probier's mal mit
$ENV{"TZ"}="CET";
(evtl. auch $ENV{"TZ"}="MEZ"; ?)
Ciao,
Mirko
Gibt es außer dieser Methode, einen fixen Wert zu time hinzuzuaddieren, nicht noch einen 'eleganteren' Weg, die Zeitzone zu korrigieren?
Probier's mal mit
$ENV{"TZ"}="CET";
(evtl. auch $ENV{"TZ"}="MEZ"; ?)
Hi Mirko,
danke, das finde ich eine "elegante" Lösung - und sie funktioniert! :-)
So ist das Script wenigstens unabhängig von der tatsächlichen Zeitzone des Servers.
Komischerweise liefert aber MEZ eine Stunde zu wenig (bei CET stimmt's). Ich dachte immer, MEZ und CET sei dasselbe...
Gruß,
Stefan
Probier's mal mit
$ENV{"TZ"}="CET";
(evtl. auch $ENV{"TZ"}="MEZ"; ?)
Fein, einer hat's gesehen ...
Komischerweise liefert aber MEZ eine Stunde zu wenig (bei CET stimmt's). Ich dachte immer, MEZ und CET sei dasselbe...
Lies Dich mal in die passende UNIX-Manpage ein;
in diese TZ-Variable kann man eine *Menge* Zeug reinschreiben.
Bei mir steht derzeit drin: "NFT-1DFT,J087,J304" (Ungefährt aus dem Gedächtnis: "norwegian-french time" im IBM-AIX-Slang, -1 Stunde Sommerzeitverschiebung, die am 87. Tag des Jahres hin- und am 304. Tag des Jahres zurückgeschaltet wird).
Was genau hier alles erlaubt ist, das ist m. E. leider herstellerabhängig, denn die obige Notation ist ja jedes Jahr anzupassen, inzwischen gibt es schlauere Mechanismen, und ich weiß nicht, ob die bereits standardisiert sind.
Lies Dich mal in die passende UNIX-Manpage ein;
Welche wäre denn das? Spontan fiel mir nur die Manpage der Shell ein, aber da war nix zu finden...
in diese TZ-Variable kann man eine *Menge* Zeug reinschreiben.
Bei mir steht derzeit drin: "NFT-1DFT,J087,J304" (Ungefährt aus dem Gedächtnis: "norwegian-french time" im IBM-AIX-Slang, -1 Stunde Sommerzeitverschiebung, die am 87. Tag des Jahres hin- und am 304. Tag des Jahres zurückgeschaltet wird).
Naja, so supergenau braucht's auch wieder nicht zu sein; nicht für meinen Anwendungsfall - da kann ich die Variable auch zu gegebener Zeit manuell umsetzen...
Gruß,
Stefan
Lies Dich mal in die passende UNIX-Manpage ein;
Welche wäre denn das? Spontan fiel mir nur die Manpage der Shell ein, aber da war nix zu finden...
"man environment" beschreibt (in AIX3) die TZ-Variable (weil sie in /etc/environment gesetzt wird) - der Text ist zu lang, um ihn hier zu posten, denke ich mal.
Dort sind übrigens auch die ganzen Dateien im Heimatverzeichnis beschrieben, nach denen in http://www.teamone.de/selfaktuell/self_forum/51220.html gefragt wurde.