Java 获取结束夏令时的问题

Java 获取结束夏令时的问题,java,dst,Java,Dst,我正在检查夏令时,因为我使用的是美国时区。由于DST于2013年3月10日凌晨2:00开始,将于2013年11月3日凌晨2:00结束。因此,我们必须在凌晨2:00将时钟向前拨1小时,当它结束时,我们必须在凌晨2:00将时钟向后拨1小时。我只是想看看DST结束时凌晨2点的实际时间是多少。DST开始时工作正常,但DST结束时不工作。以下是我尝试过的代码示例: TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles")); Calen

我正在检查夏令时,因为我使用的是美国时区。由于DST于2013年3月10日凌晨2:00开始,将于2013年11月3日凌晨2:00结束。因此,我们必须在凌晨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);
     }
}

我的Java版本:1.6.0_16。这里DatFormatted()是用户定义函数,用于以可读格式查看时间,setCurrentTime()也是用户定义方法,用于设置当前时间。有人能帮我解释一下,为什么在1:59:60AM的时间变为2:00AM,据我所知,应该改为1:00AM吗?

下面的代码显示了时区从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

什么是
DateUtil
Dateformat
?您可以用Joda时间代替吗?这是一个更好的库…@assylias现在你可以再次检查我编辑的代码以更好地理解什么是
setCurrentTimeInMills
DateFormatted
?显示代码。尝试使用
cal.set(2013,10,03,0,57+i,60)(小时=0而不是1)。感谢您的回复,但我的疑问是,为什么时区在凌晨1:00从PDT更改为PST,因为DST在凌晨2:00结束,根据我的理解,01:59:60应该是凌晨1:00。如果可能的话,请你澄清我的疑问。@JackNeil我不确定是否诚实。您可以使用我的代码发布一个新问题,解释您期望的输出,而不是实际得到的输出(并在该问题上添加
date
标记)。非常感谢您的建议。根据你的建议,我发布了一个新问题,希望这能帮助我:)
03-11-13 00:59:59 PDT
03-11-13 01:00:00 PST