TimeZone.getTimeZone("America/New_York").inDaylightTime(/* java.util.Date */ date));
超簡単。
サンプル (NewyorkSummerTime.java):
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class NewyorkSummerTime {
private static SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
private static TimeZone TZ_NEW_YORK = TimeZone.getTimeZone("America/New_York");
public static void main(String[] args) throws ParseException {
printDST("20060402");
printDST("20060403");
printDST("20061027");
printDST("20061030");
printDST("20120309");
printDST("20120312");
printDST("20121102");
printDST("20121105");
}
private static void printDST(String d) throws ParseException {
Date input = df.parse(d);
System.out.println(d + ": " + TZ_NEW_YORK.inDaylightTime(input));
}
}
実行結果:
20060402: false 20060403: true 20061027: true 20061030: false 20120309: false 20120312: true 20121102: true 20121105: false
2006年以前のルール (4月第1日曜日~10月最終日曜日) も現在のルール (3月第2日曜日~11月第1日曜日) も正しく処理できている様子。