以任意 Java TimeUnit 表示 24 小时

Express 24 hours in any Java TimeUnit

如果我的时间单位是秒类型,并且在 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 等方法的情况下自行计算循环数,但这甚至更丑陋而且真的很奇怪:)

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

Converts the given time duration in the given unit to this unit.

return unit.convert(24, TimeUnit.HOURS) / cycleDuration;