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

Java 将时间戳舍入到最接近的10秒的最有效方法,java,Java,在Java(11)中,将给定的时间戳(例如System.currentTimeMillis())四舍五入到最接近的10秒的最有效方法是什么 e、 g.12:55:11是12:55:10,12:55:16是12:55:20 此代码每秒执行约10-20次,因此它必须是高效的 有什么想法吗? 谢谢可能是这样的: long time = System.currentTimeMillis(); long roundedTime = (time + 5_000) / 10_000 * 10_000;

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

e、 g.12:55:11是12:55:10,12:55:16是12:55:20

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

有什么想法吗? 谢谢

可能是这样的:

 long time = System.currentTimeMillis();
 long roundedTime = (time + 5_000) / 10_000 * 10_000;
基本上是3 x 64位基本算术运算

(如果要将粒度截断为10秒,只需删除
+5_000

理论上,我们应该考虑整数溢出。在实践中,上述代码在大约未来2.92亿年内应该是正常的。(来源:)

可能是:

 long time = System.currentTimeMillis();
 long roundedTime = (time + 5_000) / 10_000 * 10_000;
基本上是3 x 64位基本算术运算

(如果要将粒度截断为10秒,只需删除
+5_000


理论上,我们应该考虑整数溢出。在实践中,上述代码在大约未来2.92亿年内应该是正常的。(来源:)

您需要定义高效。对一台计算机来说,每秒10到20次并不算什么。游戏以每秒60次的速度渲染数百万甚至数十亿个多边形的整个3D场景有效率,我指的是尽可能有效率。(好像我可以避免任何开销,我想)舍入一个时间戳和舍入一个数字有什么不同?时间戳是一个数字,因此您可以舍入到10000毫秒。这表明您的方法比其他获取当前时间的典型方法在计算效率上更高,除了使用您需要定义有效时间的
Instant
类之外。对一台计算机来说,每秒10到20次并不算什么。游戏以每秒60次的速度渲染数百万甚至数十亿个多边形的整个3D场景有效率,我指的是尽可能有效率。(好像我可以避免任何开销,我想)舍入一个时间戳和舍入一个数字有什么不同?时间戳是一个数字,所以你可以舍入到10000毫秒。这表明你的方法比其他获取当前时间的典型方法计算效率更高,除了使用
即时
分类。如果我在2.92亿年后遇到问题,我会再次与你联系。谢谢;)事实上,你能帮我理解吗?我不明白。你加5秒,然后除以10秒。我可能在我的脑子里有个阻塞器,但是在10K的时候,然后乘以10,之后应该是一样的吗?不像VB、JS或Python,在Java(和C++等)中,一个<代码>长< /Cult>除法产生了<代码>长< /java >结果,所以没有分数。记住我们正在做java整数除法。这将丢弃小数部分,使结果为整数。因此,除以10_000,再乘以10_000,就等于10秒。通过添加5_000,我们将使计算四舍五入而不是截断。14秒->10秒和15秒->20秒。这是如此令人印象深刻的聪明,我将永远第一次向上投票一个要求“最有效”的问题,这通常是无法证明的。但这似乎是一个非常合理的假设。如果我在2.92亿年后遇到问题,我会再次与你联系。谢谢;)事实上,你能帮我理解吗?我不明白。你加5秒,然后除以10秒。我可能在我的脑子里有个阻塞器,但是在10K的时候,然后乘以10,之后应该是一样的吗?不像VB、JS或Python,在Java(和C++等)中,一个<代码>长< /Cult>除法产生了<代码>长< /java >结果,所以没有分数。记住我们正在做java整数除法。这将丢弃小数部分,使结果为整数。因此,除以10_000,再乘以10_000,就等于10秒。通过添加5_000,我们将使计算四舍五入而不是截断。14秒->10秒和15秒->20秒。这是如此令人印象深刻的聪明,我将永远第一次向上投票一个要求“最有效”的问题,这通常是无法证明的。但这似乎是一个非常合理的假设。