java - 将时间重置为午夜会减去一天

标签 java date calendar

我有以下代码,应该将给定时间(以毫秒为单位)重置为当天的午夜。我有两个时间实例,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/

相关文章:

Swift:如何显示明天的日期

reactjs - 没有日期和月份的年份选择器

jquery - SQL 日期格式显示空白结果(使用 jQuery,例如 00-00-0000)

java - Android 日历序列化与 Java 6 不兼容

java - 以编程方式设置 jsoup 解析的网页的值

java - 如果键入 AutoCompleteTextView 完整建议词,如何监听

java - 需要检查数字是否为聚合数

java - 如何在Spring Controller 类中使用路径变量?

c# - 给定一年,我如何计算耶稣受难日的日期?

php - 检查多个日期范围以查找更广泛范围内的差距