1.概要

このクイックチュートリアルでは、Java 7、Java 8、およびJoda-Timeライブラリを使用して日付のタイムゾーンを設定する方法について説明します。

2. Java 8を使う

Java 8では、主にJoda-Timeに基づいた日付と時刻を扱うためのhttps://www.baeldung.com/migrating-to-java-8-date-time-api[新しいDate-Time API]が導入されました。としょうかん。

Java Date Time APIのhttps://docs.oracle.com/javase/8/docs/api/java/time/Instant.html[

Instant

]クラスは、UTCのタイムライン上の単一の瞬間をモデル化したものです。これは、1970 UTCの最初の瞬間のエポック以降のナノ秒数を表します。

まず、システムクロックから現在の

Instant

を取得し、タイムゾーン名についてはhttps://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html[

ZoneId

]を取得します。

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

最後に、

ZoneId



Instant

を使用して、タイムゾーンの詳細を含む日時オブジェクトを作成できます。


https://docs.oracle.com/javase/8/docs/api/java/time/Zoned

DateTime.html[

ZonedDateTime

]クラスは、ISO-8601カレンダシステムのタイムゾーン付きの日時を表します。

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

タイムゾーンを使用して日時を表すためにJava 8の

ZonedDateTime

を使用しました。

3. Java 7を使う

Java 7では、タイムゾーンの設定は少し面倒です。


Date


クラス(特定の時点を表す)には、タイムゾーン情報は含まれていません。

まず、現在のUTCの日付とhttps://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html[

TimeZone

]オブジェクトを取得しましょう。

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

Java 7では、タイムゾーン付きの日付を表すために


Calendar


クラスを使用する必要があります。

最後に、

asiaSingapore TimeZone

を使って

nowUtcカレンダー

を作成し、時間を設定します。

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

Java 8の日付時刻APIまたはJoda-Timeライブラリを優先して、Java 7の日付時刻APIを避けることをお勧めします。

4. Joda-Timeを使う

Java 8がオプションではない場合でも、日付と時刻の事実上の標準であるhttp://www.joda.org/joda-time/[Joda-Time]** から同じ種類の結果を得ることができます。 Java 8より前の世界での操作。

まず、https://search.maven.org/classic/#artifactdetails%7Cjoda-time%7Cjoda-time%7C2.10%7Cjar[Joda-Time依存関係]を__pom.xmlに追加する必要があります。

<dependency>
  <groupId>joda-time</groupId>
  <artifactId>joda-time</artifactId>
  <version>2.10</version>
</dependency>

タイムライン上の正確なポイントを表すには、

__http://joda-time.sourceforge.net/apidocs/org/joda/time/Instant.html[Instant]


from

org.joda.time__パッケージを使用できます。内部的には、このクラスは1つのデータを保持しています。1970-01-01T00:00:00ZのJavaエポックからのミリ秒単位の瞬間です。

Instant nowUtc = Instant.now();



DateTimeZone


を使用して、(指定されたタイムゾーンIDの)タイムゾーンを表します。

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

タイムゾーン情報を使用して、

nowUtc

時間がhttps://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html[

DateTime

]オブジェクトに変換されます。

DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore);

これが、Joda-time APIを使用して日付とタイムゾーンの情報を組み合わせる方法です。

5.まとめ

この記事では、Java 7、8およびJoda-Time APIを使用してJavaでタイムゾーンを設定する方法を見つけました。 Java 8の日時サポートの詳細については、https://www.baeldung.com/java-8-date-time-intro[Java 8日時のイントロ]をご覧ください。

いつものように、コードスニペットはhttps://github.com/eugenp/tutorials/tree/master/core-java-8[GitHubレポジトリ]にあります。