(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