Передача TimeUnits и преобразование в миллисекунды - PullRequest
0 голосов
/ 05 сентября 2018

Как я могу сделать API для класса, который пользователь передает TimeUnit, например. минуты, секунды, часы и число, и сохраняйте значение в миллисекундах внутри класса.
Следующее кажется единственным способом?

void someMethodDays(int numOfDays) {  
   this.longValue = TimeUnit.DAYS.toMillis(numOfDays);  
}  

void someMethodHour(int numOfHours) {  
   this.longValue = TimeUnit.HOURS.toMillis(numOfDays);  
} etc  

Это единственный способ? Метод на значение с описательным именем для аргумента?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Мне кажется, что вам не нужно развивать свой собственный класс; что вы будете изобретать велосипед. Я предлагаю вам использовать класс Duration.

Для преобразования из некоторой единицы времени в Duration:

    System.out.println(Duration.of(3, ChronoUnit.HOURS));

Или альтернативно:

    System.out.println(Duration.ofHours(3));

Вывод одинаков в обоих случаях:

PT3H

Это печатает немного смешно; это означает промежуток времени 3 часа. Формат: ISO 8601 .

    System.out.println(Duration.of(2, ChronoUnit.DAYS));

PT48H

48 часов; это правильно.

    System.out.println(Duration.of(327864523, ChronoUnit.MICROS));

PT5M27.864523S

промежуток в 5 минут 27,864523 секунды.

Если вам нужно преобразовать в миллисекунды, метод встроен:

    Duration dur = Duration.of(284, ChronoUnit.MINUTES);
    System.out.println("" + dur.toMillis() + " milliseconds");

17040000 миллисекунд

Duration является частью java.time, современного Java-API даты и времени, и, конечно, хорошо работает с другими классами этого API.

Ссылки

0 голосов
/ 05 сентября 2018

Вы можете смоделировать свой класс после хорошо известного и проверенного класса: java.time.LocalDate, который обеспечивает метод plus(long, TemporalUnit).

Аналогичным образом, вы можете создать метод someMethod(long, TimeUnit), который позволит вызывающим абонентам передавать в произвольных количествах любые TimeUnit.

void someMethod(long amount, TimeUnit unit) {
    this.longValue = unit.toMillis(amount);
}

Обратите внимание, что LocalDate также предоставляет специальные методы для добавления определенных общих единиц времени, таких как plusDays(). Это дает вызывающей стороне возможность решить, что является более понятным для кода, который они пишут:

LocalDate tomorrow = today.plusDays(1);
LocalDate tomorrow = today.plus(1, TimeUnit.DAYS);
...