2013-05-21 52 views
1

我正在检查DayLight保存时间,因为我使用的是美国时区。由于DST于2013年3月10日凌晨2:00在美国开始,并将于2013年11月3日凌晨2:00结束。所以我们必须在凌晨2点转发时钟1小时,当它结束时,必须在凌晨2点恢复时钟1小时。我只是想检查DST结束时凌晨2:00的实际时间。它在DST开始时工作正常,但DST结束时它不工作。这里是我试过的代码示例:问题得到结束DayLight保存时间

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 AM据我所知,应该是1:00 AM呢?

+1

什么是'DateUtil'和'Dateformat'? – assylias

+0

你可以使用乔达时间吗?这是一个更好的图书馆... –

+0

@assylias现在你可以再次检查我编辑的代码,以便更好地理解 – JackNeil

回答

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 
+0

感谢您的回复,但我的疑问是,为什么Timezone在凌晨1:00从PDT变为PST,因为DST在凌晨2:00结束,根据我的理解,当01:59:60时应该有凌晨1:00。如果可能,请你清除我的疑问。 – JackNeil

+0

@杰克尼尔我不确定是否诚实。您可以使用我的代码发布一个新问题,并解释您期望的输出,而不是实际得到的内容(并将'date'标签添加到该问题中)。 – assylias

+0

非常感谢您的建议。根据你的建议我发布了一个新问题,希望这可以帮助我:) – JackNeil