2020/05/02

日付処理 - Java - ニューヨークサマータイム判定

JRE がちゃんとアップデートされていて、2007年のサマータイム開始・終了日の変更に対応していれば、これでOK。

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