2016-05-03 8 views
0

Neuling wieder!was time_zones perl DateTime akzeptiert

Ich habe versucht, über die Doku, um herauszufinden, war aber nicht in der Lage:

Was time_zone Literalen ist Datetime in Perl akzeptieren?

CEST ist nicht gültig. Wenn CET angegeben wird, ist die Ausgabe die aktuelle Zeit, aber wir haben derzeit die CEST Zeitzone aktiv.

Was ich bin: Ich möchte die aktuelle Zeit und herausfinden, wie spät es in CET sein würde.

Wenn der Server am CEST läuft, sollte es als Ergebnis -1h geben. Wenn der Server bei CET läuft, sollte er die aktuelle Zeit angeben.

Mein Ansatz ist:

$av_loc_TESTHOUR=DateTime->now(time_zone=>'CET')->strftime('%H'); 

, die die aktuelle Zeit des Servers als Ergebnis gibt. Aber der Server hat momentan CEST (also erwartete ich -1h).

Grüße

Karl-Heinz

+0

einen Weg auf eigene Faust gefunden: perl -e 'verwenden DateTime; mein @ av_tmp_DT = DateTime :: TimeZone-> all_names; Drucken Sie "@av_tmp_DT \ n"; ' – averlon

+0

Ich habe einen Weg gefunden, um die Zeit in CET zu berechnen: Zuerst bekomme ich die aktuelle Stunde auf meiner Maschine: $ av_loc_TESTHOUR = DateTime-> jetzt (time_zone => 'CET') -> strftime ('% H'); Dann reduziere ich den Wert um den Offset wenn eins: $ av_loc_TESTHOUR- = DateTime-> jetzt (time_zone => 'CET') -> is_dst(); – averlon

Antwort

1

Vom DateTime Moduls documentation:

Der time_zone Parameter kann entweder ein Skalar oder ein DateTime::TimeZone Objekt sein. Eine Zeichenfolge wird einfach an die DateTime::TimeZone->new-Methode als "Name" -Parameter übergeben. Diese Zeichenfolge kann ein Olson-DB-Zeitzonenname ("America/Chicago"), eine Offsetzeichenfolge ("+0630") oder die Wörter "Floating" oder "Local" sein. Weitere Informationen finden Sie in der Dokumentation DateTime::TimeZone.

Die Dokumentation "für weitere Details" bezieht sich auf here.

Die "Olson" -Datenbank, auf die es sich bezieht, ist der Standard IANA TZ Database, dessen Kennungen Sie finden können here.

Kennungen wie "CET" sind nur in den Daten für Abwärtskompatibilität Zwecke. Sie sollten stattdessen eine vollqualifizierte standortbasierte Zeitzonen-ID verwenden, z. B. "Europe/Paris".

+0

ja, aber "Europe/Berlin" hilft in diesem Fall nicht. Ich muss die Zeit berechnen, zu welcher Stunde es in CET sein würde, egal was wir gerade in meiner Maschine haben. BASH kann! Aber ich habe bereits das Ergebnis veröffentlicht, das ich verwenden werde. Hat mich um die Ecke gebracht, aber das ist in der IT oft der Fall. Zumindest funktioniert es. – averlon

+0

Hochachtungsvoll, ich glaube nicht, dass Sie das sorgfältig durchdacht haben. Bitte lesen Sie [das Wiki für Zeitzonen-Tags] (http://stackoverflow.com/tags/timezone/info) und die Best Practices für die Sommerzeit und die Zeitzone (http://stackoverflow.com/q/2532729/634824)) Artikel. –

+0

Ich habe inzwischen CET durch "Europe/Berlin" ersetzt. Gibt das gleiche Ergebnis, ist aber sparsamer als "konform". Die Umgebung, in der diese Umstellung von CEST auf CET durchgeführt werden muss, ist komplex und ich möchte Sie nicht damit belästigen. Zumindest funktioniert die gelostete Lösung für mich. Für den Moment werde ich damit bleiben. Datum/Zeit Konstrukte sind extrem anspruchsvoll. Es hat Wochen gedauert, bis ich eine funktionierende Lösung in bash hatte. Aber danke für Hinweise. – averlon