java.time.Duration.dividedBy(long) 与 java.time.Duration.dividedBy(Duration)

Ank*_*kit 0 java java-time

我试图划分两个持续时间 ( java.time.Duration) 并执行有两种方法

  1. java.time.Duration#dividedBy(long)它返回一个本身类型的对象Duration,但由于一些 API 限制,我无法使用这个版本。

  2. java.time.Duraiton#dividedBy(Duration)它返回 along并返回一个持续时间在其他持续时间内发生的次数,但这里我们失去了精度,因为它不关心余数。

有没有办法执行此除法并得到余数结果。

Duration.ofHours(1).dividedBy(7L);  //returns 8M34.28571 seconds 
Duration.ofHours(1).dividedBy(Duration.ofSeconds(7L))  // returns 514 seconds
Run Code Online (Sandbox Code Playgroud)

我有一个限制,不能使用第一种方式。我可以使用其他方式获得结果吗?

编辑:(来自评论)我不允许将 Duration 实例转换为序数值,例如毫秒。

kni*_*ttl 5

转换为毫秒/纳秒,然后除以它们的序数值,然后Duration根据结果创建一个新对象。

  • 那么是时候摆脱这些愚蠢的检查了,因为它们会阻止您使用正确的解决方案来解决问题。实施错误一定会让你的单元测试失败(你有那些,对吧?)。更复杂的解决方案/解决方法更有可能被错误地完成。为什么不提供一个简单的“DurationUtil.convertToMillis(Duration)”帮助器?如果正确实现(并且经过单元测试!),每个人都可以使用它。您也许可以仅针对这一种方法禁用您的(抱歉,愚蠢的)检查。 (3认同)
  • @Ankit 在问题中提及这一点会非常有帮助。为什么有这样的限制?`java.time.Duration` 类具有与序数值相互转换的方法;为什么你不能使用它? (2认同)