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 TimeUTC
(GMT+09:00) JapanAsia/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の取得方法とその利用方法について説明しました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Java 入門