時間の扱い

すぐに忘れるのでメモ。

JSTの日付を取得したい

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
sdf.setTimeZone(TimeZone.getTimeZone("JST"));//タイムゾーンを必ず指定するようにすれば間違いはない
System.out.println(sdf.format(new Date()));//UTCのDateオブジェクトがJSTのyyyy/MM/ddに変換される

JSTで今日の0時丁度のUTCミリ秒を取得

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("JST"));//タイムゾーンをJSTに    
cal.setTimeInMillis(System.currentTimeMillis());//現在のUTCミリ秒をセット
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);                    //時間を0時丁度にセット
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
System.out.println(cal.getTimeInMillis());

任意の日付を取得したければ上記二つを組み合わせればおk

System.out.println(sdf.format(new Date(cal.getTimeInMillis())));

基本的に比較やらなんやらで時間を扱うときはすべてUTCミリ秒で考えれば簡単だ。