2

我需要确定时间戳是否是精确的小时(即它表示没有分钟、秒或毫秒分量的时间) - 仅使用原语。该代码每秒调用数百次,我不想要一个Calendar或其他对象的开销。

我已经尝试过了,但舍入错误会导致比较失败。

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

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

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

[编辑]

似乎这比乍一看更复杂(什么时候不是?:)

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

4

1 回答 1

6
(time % 36000000) == 0

这肯定很明显吗?

编辑

为了获得闰秒的准确性,假设自(例如)1970 年以来按年份索引的闰秒查找表,类似于:

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

需要这种精确度的程序员还应该看到下面 Einar 的所有评论。

于 2013-07-14T06:12:18.810 回答