我需要确定时间戳是否是精确的小时(即它表示没有分钟,秒或毫秒组件的时间) - 仅使用基元。代码每秒调用几百次,我不想要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分钟的倍数与年末重叠,但我可以忍受这些。
答案 0 :(得分:5)
(time % 36000000) == 0
当然这很明显?
修改强>
为了获得准确性w.r.t.闰秒,假设一个自1970年以来以年为索引的闰秒查找表,如:
((time-leapSeconds[(int)(time/(1000*60*60*24*365.2425))-1970]*1000) % 3600000) == 0
需要这种准确度的程序员也应该看到以下所有Einar的评论。