Java: die Berechnung der Zeit-zone Unterschied
Wie bekomme ich den Zeitunterschied von GMT für ein bestimmtes Datum und Zeitzone in Java?
Bestimmung, ob eine bestimmte Zeitzone in der Sommerzeit ist ziemlich straight-forward:
boolean isIsraelInDST = TimeZone.getTimeZone("Israel").inDaylightTime(new Date());
Wie bekomme ich die tatsächliche Zeit Unterschied?
- FYI, ist die lästige alte Datum-Zeit-Klassen wie
TimeZone
,java.util.Date
,java.util.Calendar
, undjava.text.SimpleDateFormat
sind jetzt legacy, überlagert von der java.Zeit Klassen gebaut in Java 8 & Java 9. Siehe Tutorial von Oracle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie Zeitzone.getRawOffset(): Gibt die Zeit in Millisekunden hinzufügen, um UTC zu erhalten standard-Zeit, in dieser Zeitzone. Da dieser Wert nicht betroffen ist Sommerzeit, es heißt raw offset.
Wenn Sie möchten, die offset-einschließlich DST verwenden Sie dann Zeitzone.getOffset(langes Datum). Sie sollten angeben, dass das konkrete Datum der Methode, wie zB jetzt - System.currentTimeMillis()
TimeZone
Klasse wurde verdrängt vor Jahren mit der Verabschiedung des JSR 310. Verwenden Sie stattdessenZoneId
undZoneRules
.Schlage ich hinzufügen, Sommer/winter-Zeit-offset zu getRawOffset:
Ich sehe, dies ist ein Alter thread - aber das hinzufügen dieser, da hatte ich eine ähnliche Anforderung vor kurzem
Dies gibt die tatsächlichen Unterschiede in millis, basierend auf die AKTUELLE Zeit(millis aus der Epoche).
tl;dr
Für den ersten Augenblick von einem bestimmten Datum.
Vermeiden legacy-Datum-Zeit-Klassen
Die anderen Antworten sind überholt, wie die
TimeZone
Klasse ist jetzt legacy. Diese und andere lästige alte Datum-Zeit-Klassen werden ersetzt durch die java.Zeit Zeit-Klassen.java.Zeit
Verwenden wir jetzt
amp; zoneid
,ZoneOffset
, undZoneRules
statt der legacy -TimeZone
Klasse.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(!).Holen sich die Regeln für die zone.
Bitten, die Regeln, wenn die Sommerzeit (DST) in Kraft ist, zu einem bestimmten Zeitpunkt. Geben Sie das moment als
Instant
. DieInstant
Klasse repräsentiert einen moment auf der Zeitachse, UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Ziffern eines dezimalbruchs).Nicht sicher, was du meinst, aber ich denke, du bist zu Fragen für den offset von UTC in der Wirkung, in diesem moment, als zone. Ein offset ist eine Anzahl von Stunden, Minuten und Sekunden Verschiebung von UTC. Wir stellen ein offset mit
ZoneOffset
Klasse. Eine Zeitzone ist eine Geschichte der Vergangenheit, der Gegenwart und der Zukunft änderungen im offset verwendet, die von den Menschen einer bestimmten region. Wir stellen eine Zeitzone mitamp; zoneid
Klasse.Weil die Einpresstiefe kann variieren im Laufe der Zeit für eine region, die wir weitergeben müssen einen Augenblick bei der Frage für einen offset.
Generiert eine Zeichenfolge, die das offset in ISO 8601 standard-format.
Beantragen können Sie den Abstand mit einer Gesamtzahl von Sekunden.
Ü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.
Mit einem JDBC-Treiber kompatibel mit JDBC 4.2 oder höher verwenden, können Sie exchange java.Zeit Objekte direkt mit Ihrer Datenbank. Keine Notwendigkeit für String oder 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.