我有以下代码,应该将给定时间(以毫秒为单位)重置为当天的午夜。我有两个时间实例,1409097600000l 和 1409270400000l,它们都已经是午夜了。然而,在通过重置代码后,一个未受影响,而另一个则在前一天结束(-86400000)。我想知道是否有人可以解释发生了什么事。这是我的代码:
Calendar start = Calendar.getInstance();
start.setTimeZone(TimeZone.getTimeZone("UTC"));
start.setTime(new Date(1409097600000l));
// reset hour, minutes, seconds and millis
start.set(Calendar.HOUR_OF_DAY, 0);
start.set(Calendar.MINUTE, 0);
start.set(Calendar.SECOND, 0);
start.set(Calendar.MILLISECOND, 0);
System.out.println("All Day Start: " + start.getTimeInMillis());
Calendar end = Calendar.getInstance();
end.setTime(new Date(1409270400000l));
System.out.println("1: " + end.getTimeInMillis());
end.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("2: " + end.getTimeInMillis());
// reset hour, minutes, seconds and millis
end.set(Calendar.HOUR_OF_DAY, 0);
end.set(Calendar.MINUTE, 0);
end.set(Calendar.SECOND, 0);
end.set(Calendar.MILLISECOND, 0);
System.out.println("All Day End: " + (end.getTimeInMillis()));
我的机器上的输出是:
All Day Start: 1409097600000
1: 1409270400000
2: 1409270400000
All Day End: 1409184000000
最佳答案
您在设置第二个日历的时间之后设置其时区。因此,您正在默认时区(可能是您本地的时区)中设置时间。然后你更改时区,这显然是昨天的某个时间。
将第二个实例中的 setTimeZone
行向上移动,就像在第一个实例中一样。
关于java - 将时间重置为午夜会减去一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25370668/