Alle Zeitzonen in Windows werden wie
angezeigt (GMT+10:00) Canberra, Melbourne, Sydney
,
GMT und Offset und der Ort. Im Gegenzug hat das Linux jede Zeitzone als Verzeichniszuordnung in / usr / share / zoneinfo / [Kontinent] / [Ort].
Ich muss jede Windows-Zeitzone auf die Linux-Zeitzone für meine Anwendung abbilden. wie
%Vor%Jetzt ist das Problem für die Internationale Datumsgrenze West , die zwischen Russland und Amerika liegt. In Windows ist es durch (GMT-12: 00) International Date Line West gekennzeichnet und aus verschiedenen Quellen habe ich herausgefunden, dass in Linux seine Etc / GMT + 12 ist.
%Vor%auch
%Vor%Das hält mich verwirrt und meine App arbeitet eng mit dem Timestamp w.r.t UTC und dem UTC-Offset zusammen. Dieses Mapping verwirrt mich und die App.
Kann mir jemand erklären, warum es umgekehrt einen -12 und einen +12 Offset in beiden für einen gleichen Ort gibt?
Vielen Dank im Voraus:)
Unicode.org hostet eine Zuordnung als Teil der CLDR. Sie können hier zur neuesten Version gelangen. Es gibt auch XML-Versionen der Daten, die von dieser Seite verlinkt sind.
Sie können Beispielcode (in Python) finden, wie Sie ein Mapping aus den XML-Daten generieren können hier .
Obligatorischer Zeitzonen-Rant:
Beachten Sie, dass derjenige, der die Zeitzonenunterstützung in Windows implementiert hat, Drogen genommen hat. Das ist kein Scherz. Sehen Sie sich die Zeitzonennamen an. Warum ist Mitteleuropäische Zeit als "Romanze Standardzeit" bekannt? Romantik? Was, weil es Paris einschließt, oder? Roman Standard Time könnte Sinn gemacht haben, es umfasst auch Rom, aber Romantik!?
Auch in der Registrierung sind die Zeitzonen nicht unter ihrer ID organisiert. Nein, sie sind wahnsinnig unter ihrem Anzeigenamen organisiert ! Da das lokalisiert ist, bedeutet es, dass jede Zeitzone in verschiedenen Übersetzungen von Windows unter einem anderen Schlüssel liegt !!! Um die richtige Zeitzone zu finden, müssen Sie also durch die gesamte Zeitzone schauen, um zu sehen, welche die richtige ID hat.
Ich habe auch einen Beispielcode dazu hier . Siehe die Funktion get_win_timezone()
.
Ich frage mich, ob es derselbe Typ ist, der dies entworfen hat, der entschieden hat, dass POSIX das Zeichen auf Zeitzonen umkehren sollte, so dass -8 Stunden plus 8 Stunden bedeuten. Auf jeden Fall bin ich mir sicher, dass sie zusammen etwas illegales geraucht haben.
Die Definitionen im Verzeichnis Etc
sollen POSIX-Stil sein, daher haben sie ihr Vorzeichen gegenüber dem, was Sie erwarten würden. Ich bin kein Experte für POSIX, aber soweit ich es verstehe, war die Grundidee, Timzones durch die Kombination ihres lokalen Namens und des Versatzes zu GMT auszudrücken. Ein Beispiel für Mitteleuropa (Mitteleuropäische Zeit / MEZ):
GMT-1
im Verzeichnis Etc
beschreibt tatsächlich eine (fiktive) Zeitzone, die "GMT" genannt wird und eine Stunde vor (der realen) GMT liegt.
Soweit ich weiß, sind diese Dateien nur dazu da, um (symbolische) Links gegen sie zu erstellen. Wenn Sie sich also irgendwo in Mitteleuropa befinden würden, würden Sie einen Link zu GMT-1
erstellen und ihn als% co_de bezeichnen %.
Die beste Empfehlung, die ich Ihnen geben kann, besteht darin, das Verzeichnis CET-1
vollständig zu ignorieren und eine Zuordnungstabelle aus Windows-Zeitzonennamen zu verwenden, um Zeitzonenordner / -dateien zu vereinheitlichen. Windows-Zeitzoneninformationen geben nicht nur GMT den Offset, sondern wissen auch um Sommerzeit (und wann beginnt oder endet). Dasselbe gilt für die Ordner / Dateien in der Zeitzonen-Datenbank, aber nicht für die Dateien im Verzeichnis Etc
- sie geben GMT einen einfachen statischen Offset.
Eine Liste der Zeitzonen in der tz-Datenbank finden Sie in der Wikipedia .
Wenn bei allen Dateien die Vorzeichen umgekehrt sind, handelt es sich bei den Dateien, die Sie ansehen, um Offward-Mapping-Offsets, während Sie wahrscheinlich eher mit umgekehrten Mapping-Offsets vertraut sind.
Windows verwendet normalerweise die lokale Zeitzone für die interne Zeit der Maschine, daher benötigt es Zeitzonendateien, die zurück in UTC übersetzt werden können. Linux verwendet normalerweise UTC als interne Zeit des Rechners, daher benötigt es Zeitzonendateien, die auf lokale Zeit umgerechnet werden können.
Da die Offsets für die beiden Maschinen komplementäre, aber entgegengesetzte Zeiträume beschreiben, liegt es nahe, dass die Zeitzonendateien umgekehrt zueinander in Beziehung stehen. Mit anderen Worten, wenn Sie einen Satz von Zonendateien von einem auswählen, ist der andere Satz negativ.