我正在试图找到DST是如何工作的,因为我已经编写了关于DST的代码示例,我想知道为什么TimeZone按照我的理解DST在2013年11月3日凌晨2:00凌晨1点更改为2 :00AM它应该在凌晨1点给出,然后TimeZone应该是chnaged,但它不是那样的。任何人都可以帮助我摆脱这个......
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
答案 0 :(得分:3)
01:00发生两次,一次在PDT,一次(一小时后)在PST。
如果您告诉日历在时间更改日期是01:00,那么该类会识别您的输入对应于2个不同的可能时间,并且任意使用其中一个。
答案 1 :(得分:3)
Calendar
选择了其中一种,而不是你期待的那种。如果你想看到凌晨1点 PDT ,那么只需添加一分钟到上午12:59:
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.add(Calendar.MINUTE, 1); // this will still be in PDT
System.out.println(fmt.format(cal.getTime()));
}
答案 2 :(得分:0)
如果我理解正确,你会想知道为什么03-11-13 01:00:00
是PST
?我想你自己解释了这个。如果实际上2:00必须移动到1:00,那么1:00已经是夏令时,即PST。