假设下面的代码片段:
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.time.Duration
您正在使用的值wront数据类型。你需要一个Duration
。 Duration
是Period
的时间级别对应:
的时间基于时间的量,诸如'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
要指定一个任务需要多长时间,使用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
。
本地时间将不支持这一点。它有一个静态初始化一些在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(值)转换小时内给您最低的时间价值,即。