Сумма времени с результатом более 24 часов - PullRequest
0 голосов
/ 07 февраля 2019

Предположим, следующий фрагмент:

LocalTime test = LocalTime.of(21, 14);
test.plusHours(5);

Результат будет, как правило, 02:14, но я хочу суммировать значение, превышающее 24-часовой предел, поэтому результат будет 26:14.

В этом случае у меня есть поле, в которое пользователь может ввести, сколько времени он потратил на задачу.Однако мне приходится работать с часами (например, 48 часов) вместо дней (например, 2 дня и 4 часа).

Есть ли способ, которым я могу достичь этого в API java.time?Если нет, что я могу сделать, чтобы достичь этого?Я использую Java 8 с Spring Boot и Hibernate для сопоставления базы данных.

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Чтобы указать, сколько времени занимает задача, используйте Длительность :

Duration initialDuration = Duration.ofHours(21).plusMinutes(34);
Duration afterFurtherWork = initialDuration.plusHours(5);
System.out.printf("Total duration was %2d hours and %02d minutes.%n",
        afterFurtherWork.toHours(), afterFurtherWork.toMinutesPart());

Обновление: как указывает Ole VV, toMinutesPart было добавлено в Java 9. Если все еще используется Java8, используйте toMinutes()%60.

0 голосов
/ 07 февраля 2019

java.time.Duration

Вы используете тип данных wront для значения.Вам нужно Duration.Duration является аналогом уровня времени Period:

Количество времени, основанное на времени, например, «34,5 секунд».

Duration durationTaken = Duration.of(5, ChronoUnit.HOURS);

Если вы хотите связать это с концепцией даты, такой как вычисление времени окончания, вы можете plus длительности для типов даты / времени:

LocalTime endTime = test.plus(durationTaken); //02:14

И вы можете сделатьчто с LocalDateTime тоже:

LocalDateTime startTime = LocalDateTime.of(LocalDate.now(), test); //2019-02-07T21:14

//add the duration:
LocalDateTime endDate = startTime.plus(durationTaken); //2019-02-08T02:14
0 голосов
/ 07 февраля 2019

LocalTime не будет поддерживать это.Он имеет статический инициализатор с некоторыми очень запеченными правилами примерно 24 часа.

/**
 * Constants for the local time of each hour.
 */
private static final LocalTime[] HOURS = new LocalTime[24];
static {
    for (int i = 0; i < HOURS.length; i++) {
        HOURS[i] = new LocalTime(i, 0, 0, 0);
    }
    MIDNIGHT = HOURS[0];
    NOON = HOURS[12];
    MIN = HOURS[0];
    MAX = new LocalTime(23, 59, 59, 999_999_999);
}

Исходя из ваших обновленных комментариев, я мог бы предложить преобразовать часы в наименьшее значение времени, то есть с TimeUnit.HOURS.toMinutes (значение).

...