与结果的时间总和超过24小时

问题描述 投票:3回答:3

假设下面的代码片段:

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

其结果将是,通常情况下,02:14但我要总结超过24小时的限制,所以结果将是26:14

在这种情况下,我有一个字段,一个用户可以输入多少时间,它在一个任务中度过。但是我有个小时(例如48小时)而不是几天(例如,2天,4小时)工作。

有没有一种方法,我可以做到这一点的java.time API中?如果没有,我能做些什么来实现这一目标?我使用Java 8,与Spring引导和Hibernate映射数据库。

java date time duration hour
3个回答
5
投票

java.time.Duration

您正在使用的值wront数据类型。你需要一个DurationDurationPeriod的时间级别对应:

的时间基于时间的量,诸如'340.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

5
投票

要指定一个任务需要多长时间,使用Duration

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 V.V.指出,toMinutesPart在Java中9.添加如果仍然使用Java 8,使用toMinutes()%60


2
投票

本地时间将不支持这一点。它有一个静态初始化一些在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(值)转换小时内给您最低的时间价值,即。

© www.soinside.com 2019 - 2024. All rights reserved.