确定时间戳是否是确切的小时

时间:2013-07-14 06:02:31

标签: java time utc

我需要确定时间戳是否是精确的小时(即它表示没有分钟,秒或毫秒组件的时间) - 仅使用基元。代码每秒调用几百次,我不想要Calendar或其他对象的开销。

我试过这个但是舍入错误导致比较失败。

 float hours = (time / 3600000f);
 boolean isExactHour = hours == (int)hours;

例如,如果time = 1373763600470,则小时= 381601.03125。该时间戳代表今天格林威治标准时间01:00:00:000,小时数应为381601。

有什么想法快速简单地做到这一点?谢谢!

[编辑]

这似乎比初看起来更复杂(什么时候不是?:)

为清楚起见,我不关心时区,也不关心闰秒。时间戳由一种方法生成,该方法返回前一个午夜 - 即2013年7月13日00:00:00:000今天。然后我计算,对于长数组中的任何时间戳,总是这个初始时间戳加上/减去5分钟的精确倍数。我的目的是确定一个给定的邮票是否是“最重要的时刻”。我可能会遇到边缘情况,其中5分钟的倍数与年末重叠,但我可以忍受这些。

1 个答案:

答案 0 :(得分:5)

(time % 36000000) == 0

当然这很明显?

修改

为了获得准确性w.r.t.闰秒,假设一个自1970年以来以年为索引的闰秒查找表,如:

((time-leapSeconds[(int)(time/(1000*60*60*24*365.2425))-1970]*1000) % 3600000) == 0

需要这种准确度的程序员也应该看到以下所有Einar的评论。