Algorithmus, um zu bestimmen, Sommerzeit-Zeit für ein Datum?
Ursprünglich bin ich auf der Suche nach einer Lösung, die in Actionscript. Der Sinn dieser Frage ist der Algorithmus, der erkennt die genaue Minute, als eine Uhr, hat das Umschalten der Sommerzeit.
So zum Beispiel zwischen der 25. und der 31. Oktober haben wir zu prüfen, ob das tatsächliche Datum ist ein Sonntag, es ist vor oder nach 2 Uhr...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine wirkliche Algorithmus für den Umgang mit Sommerzeit. Im Grunde jedes Land kann selbst entscheiden, Wann -und ob - die Sommerzeit beginnt und endet. Das einzige, was wir tun können, wie die Entwickler mit einigen Art der Tabelle, um danach zu suchen. Die meisten computer-Sprachen integrieren Sie eine solche Tabelle in der Sprache.
In Java könnten Sie die
inDaylightTime
Methode der TimeZone Klasse. Wenn Sie möchten, zu wissen, das genaue Datum und die Zeit, wenn die Sommerzeit beginnt oder endet, die in einem bestimmten Jahr, die ich empfehlen würde zu verwenden Joda Time. Ich kann nicht sehen, einen sauberen Weg zu finden, diese mit den standard-Bibliotheken.Das folgende Programm ist ein Beispiel: (Beachten Sie, dass es könnte zu unerwarteten Ergebnissen führen, wenn eine bestimmte Zeitzone keine DST-für ein bestimmtes Jahr)
Den Antwort von Richters ist richtig und sollte akzeptiert werden.
Als Richters erwähnt, gibt es keine Logik Daylight Saving Time (DST) oder andere Anomalien. Politiker willkürlich neu zu definieren, offset von UTC in Ihren Zeitzonen. Sie machen diese Veränderungen oft mit wenig Vorwarnung, oder gar keine Warnung an alle, wie Nordkorea hat vor ein paar Wochen.
java.Zeit
Hier sind einige weitere Gedanken dazu, und Beispiel-code mit den modernen java.Zeit Klassen, dem es gelang, die Joda-Time-Klassen zeigt sich in seiner Antwort.
Diese änderungen verfolgt werden in einer Liste verwaltet von ICANN, bekannt als tzdata, früher bekannt als die Olson-Datenbank. Ihre Java-Implementierung auf dem host-Betriebssystem, Datenbank-und system-wahrscheinlich haben alle Ihre eigenen Kopien dieser Daten, die ersetzt werden müssen als notwendig, wenn Veränderungen-Modus Zonen, die Sie interessieren. Es gibt keine Logik, um diese änderungen, so gibt es keine Möglichkeit, vorherzusagen, die änderungen programmgesteuert. Muss Ihr code ruft eine neue Kopie von tzdata.
Tatsächlich, Sie brauchen nicht zu bestimmen den Punkt des cut-over. Eine gute date-time-Bibliothek übernimmt das für Sie automatisch.
Java hat die beste Bibliothek, die in der Industrie führenden java.Zeit Klassen. Wenn Sie Fragen, für eine Zeit-von-Tag zu einem bestimmten Zeitpunkt in einer bestimmten region (Zeitzone), wenn die Zeit-of-day ist keine gültige Anpassung erfolgt automatisch. Lesen Sie die Dokumentation für die
ZonedDateTime
zu verstehen, die der Algorithmus verwendet, der Anpassung.Feststellen, das Ergebnis ist 3 UHR statt 2 UHR gebeten. Es war keine 2 BIN an diesem Datum in die zone. Also java.der Zeit angepasst, um 3 UHR, als die Uhr "Federn, vor" eine Stunde.
Wenn Sie das Bedürfnis zu untersuchen, die Regeln für eine definierte Zeit-zone, verwenden Sie die
ZoneRules
Klasse.Den Betrag von DST-Verschiebung verwendet, in den gegenwärtigen moment.
Holen Sie sich die nächste geplante änderung, dargestellt als eine
ZoneOffsetTransition
Objekt.Angeben die richtige Zeit zone name im format
continent/region
wieAmerika/Montreal
,Africa/Casablanca
, oderPacific/Auckland
. Verwenden Sie niemals die 3-4 Buchstaben-Abkürzung wieEST
oderIST
wie Sie sind nicht wahr, Zeitzonen, nicht standardisierten und nicht sogar einzigartig(!).Über java.Zeit
Den java.Zeit framework ist in Java 8 und höher. Diese Klassen verdrängen die lästige alte legacy Datum-Zeit-Klassen wie
java.util.Date
,Calendar
, &" = SimpleDateFormat
.Den Joda-Time Projekt, jetzt in Wartung-Modus, rät der migration auf die java.Zeit Klassen.
Um mehr zu erfahren, siehe die Oracle Tutorial. Und die Suche Stack Overflow für viele Beispiele und Erklärungen. Spezifikation JSR 310.
Können Sie exchange java.Zeit Objekte direkt mit Ihrer Datenbank. Verwenden Sie eine JDBC-Treiber kompatibel mit JDBC 4.2 oder später. Keine Notwendigkeit für Streicher, keine Notwendigkeit für
java.sql.*
Klassen.Wo erhalten Sie die java.Zeit-Klassen?
Den ThreeTen-Extra Projekt erweitert die java.mal mit zusätzlicher Klassen. Dieses Projekt ist ein Testgelände für mögliche künftige Erweiterungen zu java.Zeit. Sie finden möglicherweise einige nützliche Klassen, die hier wie
Interval
,YearWeek
,YearQuarter
, und mehr.