【发布时间】:2013-05-16 06:00:19
【问题描述】:
我正在尝试检查夏令时,因为我使用的是美国时区。美国的夏令时于 2013 年 3 月 10 日凌晨 2:00 开始,并将于 2013 年 11 月 3 日凌晨 2:00 结束。所以我们必须在凌晨 2:00 将时钟提前 1 小时,当它结束时,必须在凌晨 2:00 将时钟提前 1 小时。我只是想检查 DST 结束时凌晨 2:00 的实际时间。它在 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?
【问题讨论】:
-
DateUtil和Dateformat是什么? -
你能用 Joda Time 代替吗?这是一个更好的图书馆......
-
@assylias 现在你可以再次检查我为更好理解而编辑的代码
-
setCurrentTimeInMills和Dateformated是什么?显示代码。 -
试试
cal.set(2013,10,03,0,57+i,60);(小时 = 0 而不是 1)。