Zeitzone ermitteln
hotti
- perl
Hi,
untenstehend, siehe Perl. Frage: geht das auch einfacher?
Hotti
== schnip ==
###########################################################################
# like +0100 (1 Stunde vor GMT) oder -0430 (4 Stunden, 30 Minuten nach GMT)
sub timezone{
my @lct = localtime(time);
my @gmt = gmtime(time);
$lct[4]++;
$lct[5] += 1900;
$gmt[4]++;
$gmt[5] += 1900;
# Bezug auf 1.1.1970 2440588
my $mLocal = 1440 * (julianday($lct[3],$lct[4],$lct[5]) - 2440588) + $lct[1] + 60 * $lct[2];
my $mGreen = 1440 * (julianday($gmt[3],$gmt[4],$gmt[5]) - 2440588) + $gmt[1] + 60 * $gmt[2];
my $d = $mLocal - $mGreen;
my $sign = '+';
if($d < 0){
$sign = '-';
$d *= -1;
}
return sprintf("%s%02u%02u", $sign, $d / 60, $d % 60);
}
###########################################################################
(Hallo|Hi(ho)|Tag|Mahlzeit) hotti,
untenstehend, siehe Perl. Frage: geht das auch einfacher?
Kommt darauf an, wie du "einfacher" definierst.
Ich würde auf das komplette Berechnen des Julianischen Datums verzichten.
Zeitzonendifferenzen überschreiten ja äußerst selten die 24-Stunden-Grenze. ;-)
Daher müsste der Vergleich von Tagesnummer und davon abhängig die Bildung der Differenz
der Stunden- und Minuten-Werte ausreichen:
sub timezone_offset() {
my $tstamp = time();
my @loc = localtime($tstamp);
my @gmt = gmtime($tstamp);
# sum minutes
my $mins_loc = $loc[2] * 60 + $loc[1];
my $mins_gmt = $gmt[2] * 60 + $gmt[1];
my $day_diff = $loc[7] - $gmt[7];
# detect year change
if ($day_diff > 1) {
$day_diff = -1;
}
elsif ($day_diff < -1) {
$day_diff = 1;
}
# get time difference in minutes
my $mins_diff;
if ($day_diff > 0) {
$mins_diff = $mins_loc + 1440 - $mins_gmt;
}
elsif ($day_diff < 0) {
$mins_diff = $mins_gmt + 1440 - $mins_loc;
}
else {
$mins_diff = $mins_loc - $mins_gmt;
}
return sprintf('%+03d%02d', $mins_diff / 60, $mins_diff % 60);
}
Falls du mit "einfacher" das Einsparen von Codezeilen meintest, reicht auch sowas:
sub timezone_offset_date() {
return qx(/bin/date +"%z");
}
MffG EisFuX
hi,
»» untenstehend, siehe Perl. Frage: geht das auch einfacher?
Kommt darauf an, wie du "einfacher" definierst.
Ich würde auf das komplette Berechnen des Julianischen Datums verzichten.
Zeitzonendifferenzen überschreiten ja äußerst selten die 24-Stunden-Grenze. ;-)
Genau das ist die verflixte Crux ;-)
Es bleibt ein Gefrickel zwischen Localtime und GM-Time. Ich frag mich bloss, ob das nicht einfacher geht und einen Bezugstag in die Steinzeit zu verlegen ist ungefär so wie das Öffnen einer Bierflasche mit dem Schraubstock.
Danke Dir also für Deine Bemühungen.
sub timezone_offset_date() {
return qx(/bin/date +"%z");
}
<= morgen in der Mittagspause...
Viele Grüße,
Horst
hi,
»» sub timezone_offset_date() {
»» return qx(/bin/date +"%z");
»» }<= morgen in der Mittagspause...
Ok, das tut. Ist jedoch systemabhängig, auch das da:
use POSIX qw(strftime);
my $z = strftime("%z", localtime(time));
print "$z\n";
=> "Westeuropäische Sommerzeit" Danke ;-)
Hotte
Moin Moin!
Zeitzonendifferenzen überschreiten ja äußerst selten die 24-Stunden-Grenze. ;-)
Genau darauf würde ich NICHT wetten:
Wenn ich in einer Gegend sitze, die mit GMT+12 arbeitet (z.B. Bakerinsel oder Howlandinsel), und Du ein paar km weiter in einer GMT-14-Zone (z.B. in Kiribati), haben wir eine Zeitzonendifferenz von 26 Stunden.
Quelle: http://de.wikipedia.org/wiki/Zeitzone
Alexander
(Hallo|Hi(ho)|(Moin)( \3)|Mahlzeit) Alexander (HH),
»» Zeitzonendifferenzen überschreiten ja äußerst selten die 24-Stunden-Grenze. ;-)
Genau darauf würde ich NICHT wetten:
Wenn ich in einer Gegend sitze, die mit GMT+12 arbeitet (z.B. Bakerinsel oder Howlandinsel), ...
Dann bist du aber der wahrscheinlich einsamste Perl-Developer der Welt. ;-)
Außerdem benötigst du dann ein Notebook mit superlanghaltenden Akkus oder Solar-Anschluss,
denn ich kann mir vorstellen, dass du dort keine Steckdose findest.
Ich frage mich, ob's da überhaupt Uhren gibt ...
^____^
... und Du ein paar km weiter in einer GMT-14-Zone (z.B. in Kiribati), haben wir eine Zeitzonendifferenz von 26 Stunden.
Schön, dass du mich auf einer bewohnten Inselgruppe arbeiten lässt. ;-)
Da habe ich mich wohl verschrieben. Es ging um die Zeitdifferenz zwischen UTC/GMT und einer beliebigen Zeitzone.
Die beträgt in deinen Beispielen 12 oder 14 Stunden und liegt somit unter 24 Stunden.
MffG
EisFuX
Moin Moin!
(Hallo|Hi(ho)|(Moin)( \3)|Mahlzeit) Alexander (HH),
»» »» Zeitzonendifferenzen überschreiten ja äußerst selten die 24-Stunden-Grenze. ;-)
»» Genau darauf würde ich NICHT wetten:
»» Wenn ich in einer Gegend sitze, die mit GMT+12 arbeitet (z.B. Bakerinsel oder Howlandinsel), ...
Dann bist du aber der wahrscheinlich einsamste Perl-Developer der Welt. ;-)
Irgendeinen Rekord muß man ja schaffen.
Tja, sag ich doch: Lehrzwecke! ;-)
Außerdem benötigst du dann ein Notebook mit superlanghaltenden Akkus oder Solar-Anschluss,
denn ich kann mir vorstellen, dass du dort keine Steckdose findest.
Ich frage mich, ob's da überhaupt Uhren gibt ...
^____^
Im Laptop sitzt garantiert eine Uhr. Nicht sonderlich ganggenau, aber immerhin. Sonne dürfte es dort quasi direkt unter dem Äquator genügend geben, um einen kleinen Schlepptop zu betreiben. Das fehlende Süßwasser finde ich viel lästiger.
»» ... und Du ein paar km weiter in einer GMT-14-Zone (z.B. in Kiribati), haben wir eine Zeitzonendifferenz von 26 Stunden.
Schön, dass du mich auf einer bewohnten Inselgruppe arbeiten lässt. ;-)
Ich bin halt ein freundlicher Mensch!
Da habe ich mich wohl verschrieben.
Oder Du hast Dich nicht präzise genug ausgedrückt.
Es ging um die Zeitdifferenz zwischen UTC/GMT und einer beliebigen Zeitzone.
Kurz nach dem Posten ist mir aufgefallen, dass Du auch diese Differenz gemeint haben könntest.
Die beträgt in deinen Beispielen 12 oder 14 Stunden und liegt somit unter 24 Stunden.
Richtig. Und ohne irgendwelche Politiker könnten wir uns auf Physik und Astronomie beschränken und garantieren, dass die Differenz nie größer als 12 Stunden ist. Schönes Zitat aus dem Artikel Zeitzonen von China: "Einige Befürworter der Unabhängigkeit Taiwans haben vorgeschlagen, Taiwans Zeit um eine Stunde vorzustellen, um dadurch auf Taiwans Eigenständigkeit gegenüber China hinzuweisen. Die Gegner dieses Vorschlages führen an, dass dies stattdessen auf den japanischen Kolonialismus hinweist, da die japanische Zeit ebenfalls eine Stunde vor der chinesischen liegt." Auch schön war der Hick-Hack um den ersten Sonnenaufgang im neuen Jahrtausend.
Alexander
Hallo Alexander!
Sonne dürfte es dort quasi direkt unter dem Äquator genügend geben, um einen kleinen Schlepptop zu betreiben. Das fehlende Süßwasser finde ich viel lästiger.
Du musst nicht gleich einen Laptop mit wassergekühlter CPU mitnehmen!
Viele Grüße aus Frankfurt/Main,
Patrick
(Hallo|Hi(ho)|Tag|Mahlzeit) Patrick Andrieu,
»» Sonne dürfte es dort quasi direkt unter dem Äquator genügend geben, um einen kleinen Schlepptop zu betreiben. Das fehlende Süßwasser finde ich viel lästiger.
Du musst nicht gleich einen Laptop mit wassergekühlter CPU mitnehmen!
Dabei eignet sich Salzwasser doch prinzipiell viel besser zum Wärme(ab)transport als Süßwasser.
MffG
EisFuX
Hallo Alexander!
Das fehlende Süßwasser finde ich viel lästiger.
Man(n) kann Wasser trinken oder es auch lassen.
Viele Grüße aus Frankfurt/Main,
Patrick
(Hallo|Hi(ho)|Tag|Mahlzeit) Patrick Andrieu,
»» Das fehlende Süßwasser finde ich viel lästiger.
Man(n) kann Wasser trinken oder es auch lassen.
... jetzt werden's alleweil bleeder.
Fredl Fesl im Wegwerflied (2:30 und 3:21)
MffG
EisFuX