Java のタイムゾーンオブジェクトを取得する
Java のタイムゾーンオブジェクトの取得
タイムゾーン (TimeZone) は java.util.TimeZone を利用すると簡単に扱えます。
それぞれのタイムゾーンを表す ID (文字列) があります。この ID を使って対応するタイムゾーン・オブジェクトを取得可能です。
例えば、日本の標準時のタイムゾーンを表す ID は Asia/Tokyo ですが、次のように TimeZone クラスの getTimeZone() メソッドを用いると、 日本の標準時を表すタイムゾーンオブジェクトを取得できます。
TimeZone tz = TimeZone.getTimeZone("Asia/Tokyo");
タイムゾーンオブジェクトの利用
getTimeZone()メソッドで取得できたタイムゾーンオブジェクトを元に、次のように SimpleDateFormat 等を利用することで、それぞれのタイムゾーン毎の時刻を表示することが可能です。
package com.keicode.java.test;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class TestApp {
public static void main(String[] args) {
TimeZone tz = TimeZone.getTimeZone("Asia/Tokyo");
SimpleDateFormat sdf = new SimpleDateFormat("MMMMM dd, yyyy HH:mm");
sdf.setTimeZone(tz);
System.out.println(sdf.format(new Date()));
}
}
この実行結果は次のようになります。
August 30, 2020 15:27
尚、これを実行したのはロサンゼルスのローカル時刻で2020年8月29日23時27分です。
日米の主なタイムゾーン
いくつか主要なタイムゾーンの表記と、タイムゾーン ID を以下に示します。
表示名 | TimeZone ID |
---|---|
(GMT-08:00) Pacific Time (US & Canada) | America/Los_Angeles |
(GMT-06:00) Central Time (US & Canada) | US/Central |
(GMT-05:00) Eastern Time (US & Canada) | US/Eastern |
Coordinated Universal Time | UTC |
(GMT+09:00) Japan | Asia/Tokyo |
表示名の箇所はあくまで便宜上のものなので、プログラムにあわせて適当に変えてください。
尚、その他のタイムゾーン ID とそれぞれの意味は Wikipedia のタイムゾーンリスト等を確認してください。
Java で利用可能なタイムゾーン ID 一覧の取得
タイムゾーン ID として何が利用可能なのでしょうか。利用可能なタイムゾーン ID の一覧を取得するために、TimeZone.getAvailableIDs メソッドが利用できます。
このメソッドは利用可能なタイムゾーン ID の文字列の配列 (String[]) を返します。
このメソッドで、全てのタイムゾーンの時間をプリントするプログラムを作ると次のようになります。
package com.keicode.java.test;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class TestApp {
public static void main(String[] args) {
Date now = new Date();
for (String tzid : TimeZone.getAvailableIDs()) {
System.out.println(TestApp.getTimeText(now, tzid));
}
}
public static String getTimeText(Date date, String timezoneID) {
TimeZone tz = TimeZone.getTimeZone(timezoneID);
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
sdf.setTimeZone(tz);
return sdf.format(date) + " [" + tz.getDisplayName() + ", " + timezoneID + "]";
}
}
実行結果は次の通りです。
08/30/2020 07:34:22 [Greenwich Mean Time, Africa/Abidjan]
08/30/2020 07:34:22 [Greenwich Mean Time, Africa/Accra]
08/30/2020 10:34:22 [East Africa Time, Africa/Addis_Ababa]
08/30/2020 08:34:22 [Central European Standard Time, Africa/Algiers]
08/30/2020 10:34:22 [East Africa Time, Africa/Asmara]
08/30/2020 10:34:22 [East Africa Time, Africa/Asmera]
08/30/2020 07:34:22 [Greenwich Mean Time, Africa/Bamako]
08/30/2020 08:34:22 [West Africa Standard Time, Africa/Bangui]
08/30/2020 07:34:22 [Greenwich Mean Time, Africa/Banjul]
08/30/2020 07:34:22 [Greenwich Mean Time, Africa/Bissau]
08/30/2020 09:34:22 [Central Africa Time, Africa/Blantyre]
...
08/30/2020 13:04:22 [India Standard Time, IST]
08/30/2020 16:34:22 [Japan Standard Time, JST]
08/30/2020 20:34:22 [West Samoa Standard Time, MIT]
08/30/2020 11:34:22 [Armenia Time, NET]
08/30/2020 19:34:22 [New Zealand Standard Time, NST]
08/30/2020 12:34:22 [Pakistan Time, PLT]
08/30/2020 00:34:22 [Mountain Standard Time, PNT]
08/30/2020 03:34:22 [Atlantic Standard Time, PRT]
08/30/2020 00:34:22 [Pacific Standard Time, PST]
08/30/2020 18:34:22 [Solomon Is. Time, SST]
08/30/2020 14:34:22 [Indochina Time, VST]
以上で、タイムゾーンIDの取得方法とその利用方法について説明しました。