【发布时间】:2013-07-14 06:02:31
【问题描述】:
我需要确定时间戳是否是精确的小时(即它表示没有分钟、秒或毫秒分量的时间) - 仅使用原语。该代码每秒被调用数百次,我不想要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 分钟的倍数与年底重叠的极端情况,但我可以忍受这些。
【问题讨论】:
-
“有什么快速简单的方法吗?” 请互联网上的陌生人“为你做”?哦,你已经知道了..
-
你确定
1373763600470代表 01:00:00:000 而不是 01:00:00:470 吗? -
Erm,您为什么要尝试将
float用于exact 的任何内容?我认为您正在寻找modulo operation -
@Simon:你想要哪个时区的确切时间?时间戳基于 UTC,而不是本地时间。
-
有些时区与 UTC 的偏移量不是整数小时。