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日曜日) も正しく処理できている様子。