日付とタイムゾーンのメモ
日付とタイムゾーンのメモ。
- Calendarにはタイムゾーンがある。カレンダーを使ってDateを作成するときにタイムゾーンは重要。
- Dateにタイムゾーンはない。「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒」がすべて。
// タイムゾーンの違う2つのカレンダーを作成。 Calendar utc = Calendar.getInstance( TimeZone.getTimeZone( "UTC" ) ); Calendar jst = Calendar.getInstance( TimeZone.getTimeZone( "JST" ) ); System.out.println( "\n各カレンダーのタイムゾーン" ); System.out.println( " utc: " + utc.getTimeZone() ); System.out.println( " jst: " + jst.getTimeZone() ); // タイムゾーンに関係なく、現在の「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒」は一定。 System.out.println( "\n現在時刻の「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒」" ); System.out.println( " utc: " + utc.getTime().getTime() ); System.out.println( " jst: " + jst.getTime().getTime() ); // 日付を設定 utc.set( 2007, 5, 5, 0, 0, 0 ); jst.set( 2007, 5, 5, 0, 0, 0 ); // 2007-06-05 00:00:00 の「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒」 // は「2007-06-05 00:00:00」を解析するカレンダーのタイムゾーンに左右される。 System.out.println( "\n設定した日時の「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒」" ); System.out.println( " utc: " + utc.getTime().getTime() ); System.out.println( " jst: " + jst.getTime().getTime() );
出力:
各カレンダーのタイムゾーン utc: sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] jst: sun.util.calendar.ZoneInfo[id="JST",offset=32400000,dstSavings=0,useDaylight=false,transitions=10,lastRule=null] 現在時刻の「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒」 utc: 1181830145651 jst: 1181830145651 設定した日時の「1970 年 1 月 1 日 00:00:00 GMT からのミリ秒」 utc: 1181001600651 jst: 1180969200651