hotti: Zeitzone ermitteln

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);  
}  
###########################################################################  

  1. (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

    1. 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

      --
      Eine Uhr die steht, ist eine Standuhr.
      1. 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

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    2. 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

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
      1. (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. ;-)

        Das Betreten der Insel erfordert eine Sondergenehmigung und wird grundsätzlich nur zu wissenschaftlichen und Lehrzwecken genehmigt.

        Das Betreten der Insel erfordert eine Sondergenehmigung, die grundsätzlich nur zu wissenschaftlichen und zu Lehrzwecken erteilt wird.

        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

        1. 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.

          »» Das Betreten der Insel erfordert eine Sondergenehmigung und wird grundsätzlich nur zu wissenschaftlichen und Lehrzwecken genehmigt.

          »» Das Betreten der Insel erfordert eine Sondergenehmigung, die grundsätzlich nur zu wissenschaftlichen und zu Lehrzwecken erteilt wird.

          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

          --
          Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
          1. 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

            --
            _ - jenseits vom delirium - _

               Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
            J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
            1. (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

          2. 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

            --
            _ - jenseits vom delirium - _

               Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
            J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
            1. (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