Gil*_*ili 0 java duration division java-time
给定两个java.time.Duration实例,如何计算一个持续时间适合另一个持续时间的整数次?
使用它似乎很明显,first.toNanos() / second.toNanos()但这种方法的Javadoc引入了一个小问题:
如果此持续时间太大而无法适应长纳秒,则抛出异常.
我们如何计算这个划分而没有溢出的风险?
更新:我正在实现令牌桶算法.为此,我需要知道自上次检查以来已经过了多少"句点",以便使用额外的令牌填充存储桶.我不能简单地降低纳秒精度,因为速率可以用纳秒来指定.
Gho*_*ica 10
当您转向javadoc时,您会发现Duration类实际上使用秒和纳秒来表达自己.并写在那里:
持续时间使用纳秒分辨率,最大值可以保持很长的秒数.这大于当前估计的宇宙年龄.
所以你应该只使用秒值.或者,如果您确实需要确切的值(包括纳秒),那么请使用BigInteger.你甚至可以在这样的计算中包括纳秒.