将时间戳舍入到最接近的 10 秒的最有效方法

Chr*_*ian 1 java

Java (11) 中将给定时间戳(例如 System.currentTimeMillis())四舍五入到最接近 10 秒的最有效方法是什么?

例如 12:55:11 将是 12:55:10 而 12:55:16 将是 12:55:20

这段代码每秒执行约 10-20 次,因此它必须是高效的。

有任何想法吗?谢谢

Ste*_*n C 9

大概是这样的:

 long time = System.currentTimeMillis();
 long roundedTime = (time + 5_000) / 10_000 * 10_000;
Run Code Online (Sandbox Code Playgroud)

基本上是 3 x 64 位原始算术运算。

(如果您想截断到 10 秒的粒度,只需删除+ 5_000.)

理论上我们应该考虑整数溢出。在实践中,上面的代码在接下来的大约 2.92 亿年里应该没问题。(来源:维基百科。)

  • 如果 2.92 亿年后我遇到问题,我会再次联系你。谢谢 ;) (4认同)
  • 请记住,我们正在执行 Java 整数除法。这会丢弃小数部分,以便结果是整数。因此,除以 10_000 再乘以 10_000 就会截断为 10 秒。通过添加 5_000,我们使计算四舍五入而不是截断。14 秒 -> 10 和 15 秒 -> 20。 (2认同)