Java の Calendar とタイムゾーンの利用
ここでは java.util.Calendar クラスと java.util.TimeZone クラスを利用する方法を示します。
「タイムゾーン (TimeZone)」にて記載したように、日本のタイムゾーン ID が "Asia/Tokyo" を利用可能であるとすると、 非常に簡単にタイムゾーン毎のローカル時刻取得可能です。
尚、私はロサンゼルス在住のため、デフォルトでアメリカの西海岸の時間がとれ、日本の時間をとるためにタイムゾーンの設定を行う必要がある状況でテストを行なっています。
Java の Calendar による日付と時刻の取得
java.util.Calendar クラスを利用すると簡単に、直感的にわかる形で、日時の情報を取得できます。
DateTime では 1900 年からの年数であったり、ちょっと面倒がありましたね。
package com.keicode.java.test;
import java.util.Calendar;
public class CalendarTest1 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
displayTime(c);
}
protected static void displayTime(Calendar c) {
System.out.println(c.getTimeZone().getDisplayName());
System.out.println(
c.get(Calendar.YEAR)
+ "_" + (c.get(Calendar.MONTH) + 1)
+ "_" + c.get(Calendar.DAY_OF_MONTH)
+ "_" + c.get(Calendar.HOUR_OF_DAY)
+ "_" + c.get(Calendar.MINUTE)
+ "_" + c.get(Calendar.SECOND)
);
}
}
この実行結果発議の通りです。
Pacific Standard Time
2020_8_30_1_55_33
直感的、といっても一点注意が必要で月 (month) は 0 始まりです。従って、1月は 0 です。
Java の Calendar でのタイムゾーンの切替え
それではタイムゾーンを日本 "Asia/Tokyo" に切り替えてどのように動作するか確認しましょう。
Calendar オブジェクトのタイムゾーンを切り替えるには、 setTimeZone() メソッドにタイムゾーンオブジェクトを渡します。
package com.keicode.java.test;
import java.util.Calendar;
import java.util.TimeZone;
public class CalendarTest1 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
// Los Angeles
displayTime(c);
// Japan
TimeZone tz = TimeZone.getTimeZone("Asia/Tokyo");
c.setTimeZone(tz);
displayTime(c);
}
protected static void displayTime(Calendar c) {
System.out.println(c.getTimeZone().getDisplayName());
System.out.println(
c.get(Calendar.YEAR)
+ "_" + (c.get(Calendar.MONTH) + 1)
+ "_" + c.get(Calendar.DAY_OF_MONTH)
+ "_" + c.get(Calendar.HOUR_OF_DAY)
+ "_" + c.get(Calendar.MINUTE)
+ "_" + c.get(Calendar.SECOND)
);
}
}
java.util.TimeZone クラスの getTimeZone メソッドに "Asia/Tokyo" を渡しているラインで、日本のタイムゾーンの TimeZone オブジェクトを取得しています。
Pacific Standard Time
2020_8_30_1_59_17
Japan Standard Time
2020_8_30_17_59_17
この結果から、確かに同じ時刻でのアメリカ西海岸時刻と日本の時刻が取得されたことがわかります。