我试着找出夏令时是如何工作的,因为我写了关于夏令时的代码样本,我想知道为什么TimeZone在凌晨1:00改变,根据我对夏令时的理解,2013年11月3日凌晨2:00,所以在凌晨2:00AM它应该给出1:00AM,然后TimeZone应该被更改,但它不是这样的。有没有人能帮我解决这个问题...
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-21 23:44:35
01:00发生两次,一次在PDT中,一次(一小时后)在PST中。
如果您告诉Calendar现在是时间更改日期的01:00,那么该类识别出您的输入对应于两个不同的可能时间,并任意使用其中一个。
发布于 2013-05-22 00:15:06
@Andrew Spencer是对的,凌晨1点有两种可能性,Calendar选择了其中的一种,只是不是你想要的。如果你想看到1:00 AM PDT,那么只需在12:59 AM增加一分钟:
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()));
}发布于 2013-05-21 23:39:47
如果我没理解错的话,你可能想知道为什么03-11-13 01:00:00是PST?我想你自己已经解释过了。如果2:00实际上必须移到1:00,那么1:00已经是夏令时,即PST。
https://stackoverflow.com/questions/16673860
复制相似问题