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");
最後に、ZoneIdとInstantを使用して、タイムゾーンの詳細を含む日時オブジェクトを作成できます。 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 dependencyをpom.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で利用できます。