EisFuX: Weniger Rechnen oder weniger tippen?

Beitrag lesen

(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