1

如果我的时间单位是秒类型并且循环持续时间是 86400/20 = 4320 个循环后的 20 秒,则 24 小时过去了。

long numberOfCyclesToReach24Hours(long cycleDuration, TimeUnit unit) {
    // if I knew that unit is of type seconds I could
    return TimeUnit.HOURS.toSeconds(24) / cycleDuration
    // but if it is of type MILLISECONDS for example I have to
    //return TimeUnit.HOURS.toMillis(24) / cycleDuration
}

这个问题是否有一个优雅的解决方案,或者我真的必须切换所有类型的案例?我知道这不会经常发生,但是如果将来TimeUnit引入新类型,则必须修改代码:)

我也在考虑使用该TimeUnit.values方法并依赖于返回类型的顺序,并通过检查输入单元在其中的位置来了解哪个常数(1000L、60L 等)我可以计算循环次数我自己没有任何toSecondstoMillis方法,但这更丑陋,真的很奇怪:)

4

1 回答 1

3

听起来您只是在寻找convert方法:

将给定单位中的给定持续时间转换为此单位。

return unit.convert(24, TimeUnit.HOURS) / cycleDuration;
于 2017-09-28T21:39:24.927 回答