Legen Sie die Zeitzone eines Datums in Java fest

1. Übersicht

In diesem kurzen Tutorial erfahren Sie, wie Sie die Zeitzone eines Datums mit Java 7, Java 8 und der Joda-Time-Bibliothek festlegen.

2. Verwenden von Java 8

In Java 8 wurde eine neue Datums- / Uhrzeit-API für die Arbeit mit Datums- und Uhrzeitangaben eingeführt, die weitgehend auf der Joda-Zeitbibliothek basiert.

Die Instant- Klasse der Java Date Time API modelliert einen einzelnen Momentanpunkt auf der Zeitachse in UTC. Dies entspricht der Anzahl der Nanosekunden seit der Epoche des ersten Augenblicks von 1970 UTC.

Zuerst erhalten wir den aktuellen Instant von der Systemuhr und der ZoneId für einen Zeitzonennamen:

Instant nowUtc = Instant.now(); ZoneId asiaSingapore = ZoneId.of("Asia/Singapore");

Schließlich können ZoneId und Instant verwendet werden, um ein Datums- / Uhrzeitobjekt mit Zeitzonendetails zu erstellen. Die ZonedDateTime- Klasse repräsentiert eine Datums- und Uhrzeitangabe mit einer Zeitzone im ISO-8601-Kalendersystem:

ZonedDateTime nowAsiaSingapore = ZonedDateTime.ofInstant(nowUtc, asiaSingapore);

Wir haben ZonedDateTime von Java 8 verwendet , um eine Datums- und Uhrzeitangabe mit einer Zeitzone darzustellen .

3. Verwenden von Java 7

In Java 7 ist das Festlegen der Zeitzone etwas schwierig. Die Datumsklasse (die einen bestimmten Zeitpunkt darstellt) enthält keine Zeitzoneninformationen.

Lassen Sie uns zunächst das aktuelle UTC-Datum und ein TimeZone- Objekt abrufen :

Date nowUtc = new Date(); TimeZone asiaSingapore = TimeZone.getTimeZone(timeZone);

In Java 7 müssen wir die Calendar- Klasse verwenden, um ein Datum mit einer Zeitzone darzustellen.

Schließlich können wir mit der asiaSingapore TimeZone einen nowUtc-Kalender erstellen und die Zeit einstellen:

Calendar nowAsiaSingapore = Calendar.getInstance(asiaSingapore); nowAsiaSingapore.setTime(nowUtc);

Es wird empfohlen, die Java 7-Datums- / Uhrzeit-API zugunsten der Java 8-Datums- / Uhrzeit-API oder der Joda-Time-Bibliothek zu vermeiden.

4. Verwenden von Joda-Time

Wenn Java 8 keine Option ist, können wir mit Joda-Time , einem De-facto-Standard für Datums- und Uhrzeitoperationen in der Welt vor Java 8 , immer noch das gleiche Ergebnis erzielen .

Zuerst müssen wir die Joda-Time-Abhängigkeit zu pom.xml hinzufügen :

 joda-time joda-time 2.10 

Um einen genauen Punkt auf der Zeitachse darzustellen, können wir Instant aus dem Paket org.joda.time verwenden . Intern enthält die Klasse ein Datenelement, und zwar im Millisekundenbereich ab der Java-Epoche von 1970-01-01T00: 00: 00Z:

Instant nowUtc = Instant.now();

Wir werden DateTimeZone verwenden , um eine Zeitzone darzustellen (für die angegebene Zeitzonen-ID):

DateTimeZone asiaSingapore = DateTimeZone.forID("Asia/Singapore");

Jetzt wird die nowUtc- Zeit mithilfe der Zeitzoneninformationen in ein DateTime- Objekt konvertiert :

DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore);

Auf diese Weise kann die Joda-Zeit-API verwendet werden, um Datums- und Zeitzoneninformationen zu kombinieren.

5. Schlussfolgerung

In diesem Artikel haben wir herausgefunden, wie die Zeitzone in Java mithilfe von Java 7, 8 und der Joda-Time-API festgelegt wird. Weitere Informationen zur Datums- und Uhrzeitunterstützung von Java 8 finden Sie in unserem Java 8-Datums- und Uhrzeit-Intro.

Wie immer ist das Code-Snippet im GitHub-Repository verfügbar.