日付とタイムゾーン
以前書いた、TimeZoneを考慮した日付のフォーマット - suusuke@Hatenaで、タイムゾーンを"GMT"に指定しているのに Calendar#getTime() をコンソールに出力すると"JST"が表示されるっていうなぞ?が解決した。
そもそも、Dateにタイムゾーンは無いみたいだ。動作環境のタイムゾーンに依存するみたい。
2007-06-14をみて理解できた。
// タイムゾーンの違う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() );
java.util.Calendarは使いにくいなぁ。それに比べて、org.joda.time.DateTimeは使いやすい。