「Java」タイムゾーンについて

Javaタイムゾーンについて簡単に調べたので、その時のメモ。

[ 環境情報 ]
Windows 7 SP1
Java SE 7

デフォルトのタイムゾーンは、TimeZone#getDefault メソッドや、システムプロパティの user.timezone で確認できる。

import java.util.TimeZone;

class TimeZoneSample {
	public static void main(String[] args) {
		System.out.println(TimeZone.getDefault());
		System.out.println(System.getProperty("user.timezone"));
	}
}

■ 出力結果

sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset=32400000,dstSavings=0,useDaylight=false,transitions=10,lastRule=null]
Asia/Tokyo

デフォルトのタイムゾーンは、[ コントロールパネル ] - [ 日付と時刻 ] - [ タイムゾーンの変更 ] から設定できる値を基にしてるっぽい。
上記は設定が「UTC + 09:00」の場合。例えば、「UTC」とかにしてやると、以下の出力結果になる。

■ 出力結果 ( UTC の場合 )

sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
UTC


システムプロパティに値をもっているので、もちろん -D オプションで指定してやってもデフォルトのタイムゾーンを変更することができる。

java -Duser.timezone="Europe/Paris" TimeZoneSample
sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
Europe/Paris


サポートされているタイムゾーンの ID は、以下の TimeZone#getAvailableIDs で一覧の確認ができるみたいです。

String[] supportID = TimeZone.getAvailableIDs();
for(String s : supportID) {
	System.out.println(s);
}


以下 API ドキュメント。

・TimeZone (Java Platform SE 7 )
http://docs.oracle.com/javase/jp/7/api/java/util/TimeZone.html

以上です。