Die Identifizierung Zeitzonen in ISO 8601
Nein, ich spreche nicht über die zone offsets --- diese können variieren, während Jahr für eine region, basierend auf z.B. DST. Ich Rede von der tatsächlichen Zeitzonen verwaltet von IANA. Ich verstehe diese nicht unterstützt durch ISO 8601, richtig?
Welche Plattformen dabei zu unterstützen die Identifizierung Zeitzonen in ISO 8601-wie string-Darstellungen? Ich merke, dass die neueste Java date/time-Bibliothek ist die Verwendung einer erweiterten ISO-8601-format, z.B. 2011-12-03T10:15:30+01:00[Europe/Paris]
. (Siehe DateTimeFormatter-API.)
Gibt es einige konvergierende übereinkommen (z.B. mit anderen Sprachen und Plattformen) für die Erweiterung der ISO-8601-Unterstützung, time zone designation?
Die Art, wie ich Lesen Sie die W3C-Beschreibung, Sie scheinen richtig zu sein: ISO-8601 unterstützt zone offsets, aber nicht von Zeitzonen mit Variablen-offsets (in der Regel Zeitzonen mit Sommer-Zeit, und das gilt für viele der IANA Zeitzonen).
Der W3C-Note Dokument, das Sie verbunden ist aber eine kurze Zusammenfassung der tatsächlichen ISO-8601-standard. Schlage ich die Lektüre der hervorragenden Wikipedia-Artikel zu ISO-8601 und auf Woche Datum, und vielleicht Entwurf der standard (offizielle standard ist hinter einer paywall).
Ich will nur zu beachten, dass ich bin erstaunt, dass zum Zeitpunkt der bounty abläuft, all diese Menschen und all diese Kommentare kommen mit nur ein anderes Beispiel einer Bibliothek/Plattform (@MattJohnson genannten Knoten Zeit), dass mit der Zeitzone in einen string-format!
InformationsquelleAutor Garret Wilson | 2017-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Richtig. ISO-8601 beschäftigt sich nicht mit Zeit-zone Bezeichner. IANA/Olson TZ-Namen sind nicht "standard". Sie sind einfach das zuverlässigste, was wir haben. (Manche betrachten Sie die de facto standard.)
Unterstützen, was genau? Dieser Teil deiner Frage ist unklar. Wenn Sie Mittel zur Unterstützung der IANA Zeitzonen, das ist gut, dass alle über dem Platz. Einige Plattformen haben Sie eingebaut, und einige verlassen sich auf Bibliotheken. Wenn Sie Mittel zur Unterstützung einer string-Darstellung eines ISO-8601 Datum-Zeit-offset + Zeit-zone, ID, einige Plattformen haben das und manche nicht. Sie werden spezifischer sein müssen, wenn Sie mehr wissen wollen.
Ich denke, du redest
DateTimeFormatter.ISO_ZONED_DATE_TIME
. Die docs sagen zwar:Also das ist Java-spezifischen format, nicht-standard.
Soweit ich weiß, gibt es derzeit keinen standard, deckt die Kombination eines nach ISO8601 timestamp und einem IANA time zone identifier in einem einzigen format. Man könnte es auf viele verschiedene weisen, einschließlich:
2011-12-03T10:15:30+01:00[Europe/Paris]
(dies ist der Standard in Java 8)2011-12-03T10:15:30+01:00(Europe/Paris)
2011-12-03T10:15:30+01:00 Europe/Paris
2011-12-03T10:15:30+01:00 - Europe/Paris
2011-12-03T10:15:30+01:00/Europe/Paris
2011-12-03T10:15:30+01:00|Europe/Paris
2011-12-03T10:15:30 Europe/Paris (+01)
(dies ist die Standardeinstellung in Noda-Zeit)Wenn das, was Sie suchen, ist ein Weg, um eine
ZonedDateTime
oder ähnliche Daten, die in einer API in einer standardisierten Art und Weise, meine persönliche Empfehlung wäre, sich die Zeit zu vertreiben zone Namen in einem separaten Feld. So, jeder Teil der Daten ist so gut, wie es sein kann. Zum Beispiel in JSON:"Das unterstützen, was genau? Dieser Teil deiner Frage ist unklar." Gut, dachte ich, dass ich das in den Titel... Aber fair genug---ich habe aktualisiert die Frage. "Wenn Sie meinen, zu unterstützen, eine string-Darstellung eines ISO-8601 Datum-Zeit-offset + Zeit-zone, ID, einige Plattformen haben das und manche nicht." Gut, das ist die Frage, die ich verlange. Was sind andere Plattformen tun? Ich hatte gehofft, jemand könnte mir ein paar andere Beispiele, so konnte ich wissen, ob Java war allein auf dieser oder wenn es nach einigen konvergierenden trend.
Auch, es klingt wie das, was Sie suchen ist ein RFC. Vielleicht sollte man vorschlagen? 🙂
Hey, ich habe gerade herausgefunden, dass es gibt einen Entwurf für eine nach ISO8601-2 "Erweiterungen" in die arbeiten auf ISO, und natürlich dachte ich sofort an Sie. Vielleicht könntest du diese Kontaktieren empfehlen? 🙂
FYI - ich habe angefangen, einen Twitter-thread hier, wenn Sie möchten, um zu läuten. 🙂
InformationsquelleAutor Matt Johnson
Den Antwort von Matt Johnson ist spot-on richtig. Ich werde nur noch einige wenige Gedanken hinzufügen.
Zeit-zone versus offset von UTC
Einer offset von UTC ist lediglich eine Reihe von Stunden, Minuten und Sekunden vor/hinter UTC. Allein dies macht schon einen Datum-Zeit-zu einem bestimmten Zeitpunkt auf der Zeitachse. Aber es ist bei weitem nicht so informativ wie die offizielle Zeitzone name als gut.
Zwar gibt es keine standard-noch für die Einbeziehung des Zeit-zone Namen, ich hoffe andere Folgen dem Beispiel von java.Zeit-Klassen, die in Anhängen in eckigen Klammern den Namen der Zeitzone. Dieses format scheint für mich sinnvoll, wie es wäre, einfach zum abschneiden der eckigen Klammer Teil der Abwärtskompatibilität mit nicht-fähigen software.
Beispielsweise:
2011-12-03T10:15:30+01:00[Europe/Paris]
. Wenn die Daten nur2011-12-03T10:15:30+01:00
wären wir in der Lage, zu identifizieren moment auf der Zeitachse, aber nicht in der Lage, passen Sie die anderen Momente in der gleichen Geistesverfassung, als würden wir nicht wissen, was die Regeln der Anpassung anzuwenden. Zonen wieEurope/Zagreb
,Africa/Brazzaville
,Arctic/Longyearbyen
, undEurope/Isle_of_Man
allen teilen der offset+01:00
, aber Sie können auch andere Anpassungen in Kraft, die sich von denen derEurope/Paris
. Also, wenn Sie waren zu versuchen, fügen Sie drei Tage, um den Wert2011-12-03T10:15:30+01:00
Sie wirklich nicht treu berechnen Sie das Ergebnis, weil Sie nicht wissen, welche Einstellungen müssen möglicherweise gelten wie DST cutovers werden können, die während dieser drei Tage.Einer Zeitzone definiert die Regeln für den Umgang mit Anomalien wie Daylight Saving Time (DST). Politiker auf der ganzen Welt genießen die vornehmen Ihrer Zeit Zonen, oder sogar neu zu definieren. Also diese Regeln ändern sich Häufig. Denken Sie an eine Zeit-zone als eine Ansammlung von offsets im Laufe der Zeit, viele Perioden in der Geschichte, in der jeder Zeit hatte, ein bestimmtes offset in die Verwendung in einer bestimmten region.
Können Sie denken, ein Zeit-zone als eine Sammlung von offset-von-UTC-Werte. In
America/Los_Angeles
Teil dieses Jahr ist 8 Stunden hinter UTC und Teil des Jahres werden 7 Stunden hinter UTC. Das macht 2 Punkte von Daten erhoben werden, die Zeit-zone.Weiteres Beispiel, in früheren Jahren, in der Türkei verbrachte einen Teil jedes Jahr 2 Stunden vor der UTC und Teil der jedes Jahr 3 Stunden vor. Im Jahr 2016 verändert, um auf unbestimmte Zeit bleiben 3 Stunden vor. Also, mehrere Punkte von Daten in der Zeitzone
Europe/Istanbul
.Nur UTC-Zeit
Persönlich sehe ich nicht viel Wert in selbst mit Werten wie
2011-12-03T10:15:30+01:00
. Ohne Zeit-zone, Sie könnte genauso gut verwenden die UTC allein. In diesem Fall2011-12-03T09:15:30Z
(9 UHR statt 10 UHR).In der Regel die beste Praxis ist die Verwendung von UTC, wenn die Speicherung und den Austausch von Datum-Uhrzeit-Werte. Denke, von UTC als die einzig Wahre Zeit, mit Zonen-oder die offset-Werte als bloße Variationen.
Ich Stimme voll und ganz, zu 100%. Ich betone die entgegengesetzte position, weil ich Programmierer neigen dazu, (a) selbst fahren Nüsse Konvertierung in und aus Ihren eigenen engstirnigen Zeit-zone, und (b) denken (beten?) dass die Verwendung von "lokalen" (unzoned) Datum-Uhrzeit-Werte werden irgendwie befreit Sie von zu müssen, der Umgang mit Zeit-zone Probleme. Aber wie Sie sagen,
LocalDateTime
ist sicherlich hilfreich in vielen Situationen, insbesondere Terminen, wie der NYSE öffnen, weil die Politiker so oft, so sorglos, & so schnell neu definieren Zeitzonen. Nur letztes Jahr, zum Beispiel, die Türkei beschlossen, zu bleiben auf Sommerzeit mit nur einige Wochen Warnung.Nur die TZ-offset ermöglicht das sammeln von etwas client-relativen-Wert. Während nicht annähernd so robust wie TZ-Namen für andere Zwecke, es ist ein kleiner Schritt.. vor allem (denn in 99% der Fälle, bei Zeit der Aufnahme) - damit sich ein "Tag" im Unterschied zu einer Zeit, während der Aufnahme sowohl innerhalb einer 'einzigen skalaren'. Ein TZ-offset hat die schöne Eigenschaft über eine TZ-Namen, dass es eine Reine Zuordnung zu UTC, obwohl Sie in der Lage zu auch erfassen Sie die TZ-Namen in so einem " einzigen skalaren form wäre nett für eine künftige verbesserte Handhabung :}
..und das pure-Konzept von einem "Tag" wird Häufig übersehen, mit UTC-Zeit Ansätze. Doch für viele Aspekte des Lebens, alles, was relevant ist, ist der Tag und die relative Zeit.. und in diesem Zusammenhang ist es egal, ob dieser Tag springt vor und zurück, von 'Echtzeit' durch das Jahr(en).
InformationsquelleAutor Basil Bourque