对于我的程序,我需要将时间戳(以毫秒为单位)舍入到最近的一天。要回合几个小时,我只是这样做:
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;
}
答案 0 :(得分:4)
两小时错误是由于时区造成的。
您可以自行添加两小时调整,也可以使用Calendar或Joda-Time等库。
如果您自己添加两小时调整,则必须手动考虑夏令时。如果您使用库,将为您处理。日期和时间有很多规则。我强烈建议使用某种类型的库来处理应用程序中的日期和时间。
答案 1 :(得分:0)
你可以很容易地使用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);
因此,您可以轻松找出与结果最近的一天