Javaで日付のタイムゾーンを設定する

Javaで日付のタイムゾーンを設定する

1. 概要

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

2. Java 8の使い方

Java 8では、日付と時刻を操作するためのa new Date-Time APIが導入されました。これは、主にJoda-Timeライブラリに基づいています。

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

まず、システムクロックから現在のInstantを取得し、タイムゾーン名のZoneIdを取得します。

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

最後に、ZoneIdInstantを使用して、タイムゾーンの詳細を含む日時オブジェクトを作成できます。 ZonedDateTimeクラスは、ISO-8601カレンダーシステムのタイムゾーンを持つ日時を表します。

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

Java 8のZonedDateTimeを使用して、タイムゾーンで日時を表しました。

3. Java 7を使用する

Java 7では、タイムゾーンの設定は少し難しいです。 Dateクラス(特定の瞬間を表す)には、タイムゾーン情報は含まれていません。

まず、現在のUTC日付とTimeZoneオブジェクトを取得しましょう。

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

Java 7では、Calendarクラスを使用して、タイムゾーンで日付を表す必要があります。

最後に、asiaSingapore TimeZoneを使用してnowUtc Calendarを作成し、時刻を設定できます。

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

Java 8 date time APIまたはJoda-Timeライブラリを優先して、Java 7 date timeAPIを回避することをお勧めします。

4. Joda-Timeを使用する

Java 8がオプションではない場合、we can still get the same kind of result from Joda-Timeは、Java8より前の世界での日時操作の事実上の標準です。

まず、Joda-Time dependencypom.xml:に追加する必要があります


  joda-time
  joda-time
  2.10

タイムライン上の正確なポイントを表すために、org.joda.timeパッケージのInstant を使用できます。 内部的に、このクラスは1つのデータを保持します。これは、Javaエポック1970-01-01T00:00:00Zからのミリ秒単位のインスタントです。

Instant nowUtc = Instant.now();

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

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

これで、nowUtc時間は、タイムゾーン情報を使用してDateTimeオブジェクトに変換されます。

DateTime nowAsiaSingapore = nowUtc.toDateTime(asiaSingapore);

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

5. 結論

この記事では、Java 7、8、およびJoda-Time APIを使用してJavaでタイムゾーンを設定する方法を見つけました。 Java 8の日時サポートの詳細については、our Java 8 date-time introを確認してください。

いつものように、コードスニペットはGitHub repositoryで利用できます。