在任何Java TimeUnit中快速24小时

时间:2017-09-28 21:30:03

标签: 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等方法的情况下自行计算周期数,但这更加丑陋而且非常奇怪:)

1 个答案:

答案 0 :(得分:3)

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

  

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

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