Stellen Sie die Zeitzone eines Datums in Java ein

Stellen Sie die Zeitzone eines Datums in Java ein

1. Überblick

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

2. Java verwenden 8

Java 8 führtea new Date-Time API für die Arbeit mit Datums- und Uhrzeitangaben ein, die größtenteils auf der Joda-Time-Bibliothek basierten.

DieInstant-Klasse der Java Date Time API modelliert einen einzelnen Momentanpunkt auf der Zeitachse in UTC. Dies entspricht der Anzahl der Nanosekunden seit der Zeit des ersten Moments von 1970 UTC.

Zuerst erhalten wir die aktuellenInstant von der Systemuhr undZoneId für einen Zeitzonennamen:

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

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

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

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

3. Java 7 verwenden

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

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

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

In Java 7 müssen wir die KlasseCalendarverwenden, um ein Datum mit einer Zeitzone darzustellen.

Schließlich können wir mitasiaSingapore TimeZone einnowUtc Calendar 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. Joda-Time verwenden

Wenn Java 8 keine Option ist, istwe can still get the same kind of result from Joda-Time ein De-facto-Standard für Datums- und Uhrzeitoperationen in der Welt vor Java 8.

Zuerst müssen wirJoda-Time dependency zupom.xml: addieren


  joda-time
  joda-time
  2.10

Um einen genauen Punkt auf der Zeitachse darzustellen, können wirInstant  ausorg.joda.time Paket verwenden. Intern enthält die Klasse ein Datenelement, und zwar in Millisekunden ab der Java-Epoche vom 01.01.1970 (00: 00Z):

Instant nowUtc = Instant.now();

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

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

Jetzt wird die Zeit vonnowUtcunter Verwendung der Zeitzoneninformationen in ein Objekt vonDateTimekonvertiert:

DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore);

Auf diese Weise kann die Joda-Zeit-API zum Kombinieren von Datums- und Zeitzoneninformationen verwendet werden.

5. Fazit

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 unterour Java 8 date-time intro.

Wie immer ist das Code-Snippet inGitHub repository verfügbar.