如何将时间舍入到最近的一天?
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);
这样您就可以轻松地根据结果找出最近的日期
对于我的程序,我需要将时间戳(以毫秒为单位)四舍五入到最近的一天。要四舍五入到小时,我只是这样做:
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);
这样您就可以轻松地根据结果找出最近的日期