1

米国のタイムゾーンを使用しているため、夏時間を確認しようとしています。米国の DST は 2013 年 3 月 10 日の午前 2 時に始まり、2013 年 11 月 3 日の午前 2 時に終了します。したがって、午前 2:00 に時計を 1 時間進め、終了したら午前 2:00 に時計を 1 時間戻す必要があります。DST が終了する午前 2 時の実際の時刻がどのようになるかを確認したかっただけです。DST の開始時には正常に動作していますが、DST の終了時には動作しません。私が試したコードのサンプルは次のとおりです。

TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
Calendar cal =Calendar.getInstance();
if (TimeZone.getDefault().useDaylightTime())
{
for(int i = 0; i< 5 ; ++i)
{
     cal.set(2013,10,03,1,57+i,60);
     long timemillis = cal.getTimeInMillis();
     setCurrentTimeInMills(timemillis);
     String formatTime = Dateformated(timemillis);
     System.out.println(formatTime);
     }
}

出力は次のようになります。

03-11-2013 01:58:00 PST
03-11-2013 01:59:00 PST
03-11-2013 02:00:00 PST
03-11-2013 02:01:00 PST
03-11-2013 02:02:00 PST

私のJavaバージョン:1.6.0_16。ここで Datformated() は、時間を読み取り可能な形式で表示するユーザー定義関数であり、setCurrentTime() は現在の時刻を設定するユーザー定義メソッドでもあります。午前 1:59:60 に時刻が午前 2:00 になる理由を教えてください。私の知る限りでは、代わりに午前 1:00 にする必要がありますか?

4

1 に答える 1

0

以下のコードは、PDT から PST へのタイムゾーンの変更を示しています。

public static void main(String[] args) throws InterruptedException {
    TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
    DateFormat fmt = new SimpleDateFormat("dd-MM-yy HH:mm:ss zz");

    Calendar cal = Calendar.getInstance();
    cal.set(2013, 10, 03, 0, 59, 59);
    System.out.println(fmt.format(cal.getTime()));

    cal.set(2013, 10, 03, 1, 0, 0);
    System.out.println(fmt.format(cal.getTime()));
}

出力:

03-11-13 00:59:59 PDT
03-11-13 01:00:00 PST
于 2013-05-21T14:05:05.360 に答える