如何将时间舍入到最近的一天?

How to round time to nearest day?

对于我的程序,我需要将时间戳(以毫秒为单位)四舍五入到最近的一天。要四舍五入到小时,我只是这样做:

private static long roundToHour(long time)
{
    //Add 0.5 hours and then cut off everything unnecessary.
    time += 1800000;
    time = time/(3600000);
    return time*3600000;
}

但是当我尝试用一​​整天做类似的事情时,代码有 2 小时的休息时间。谁能告诉我为什么?

private static long roundToDay(long time)
{
    time += 43200000;
    time = time/86400000;
    return time*86400000;
}

两个小时的误差是由于时区造成的。

您可以自己添加两小时调整,也可以使用像 Calendar or Joda-Time 这样的库。

如果您自己添加两小时调整,则必须手动考虑夏令时。如果您使用图书馆,这将为您处理。日期和时间有很多规则。我强烈建议使用某种库来处理应用程序中的日期和时间。

你可以很容易地使用java.util.Calendar。

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(time);

cal.get(Calendar.DAY_OF_MONTH);
cal.get(Calendar.HOUR_OF_DAY);
cal.get(Calendar.DAY_OF_WEEK);

这样您就可以轻松地根据结果找出最近的日期