Экспресс 24 часа в любом Java TimeUnit

Если моя единица времени имеет тип секунд, а продолжительность цикла составляет 20 секунд после 86400/20 = 4320 циклов, то проходит 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 и т. д.) я мог бы рассчитать количество циклов самостоятельно без каких-либо toSeconds, toMillis и т.д. методы, но это еще страшнее и страннее:)

1 ответ

Решение

Похоже, вы просто ищете convert метод:

Преобразует данное время в данной единице в эту единицу.

return unit.convert(24, TimeUnit.HOURS) / cycleDuration;
Другие вопросы по тегам