还有的与计算两个日期或Java中两个时间之间的区别对待SO问题太多了。 许多答案指出与核心Java日期类的问题,并使用Jodatime建议,但据我所知,有没有暗示了如何使用jsr310做到这一点。
那么,有没有什么方法来计算两个日期或jsr310两个时间之间的区别?
作为参考,下面的问题处理这个问题:
在核心Java:
- 两个日期时间之间的毫秒
在Jodatime:
- 天中间人两个日期
- 两个日期时间之间的时间间隔
还有的与计算两个日期或Java中两个时间之间的区别对待SO问题太多了。 许多答案指出与核心Java日期类的问题,并使用Jodatime建议,但据我所知,有没有暗示了如何使用jsr310做到这一点。
那么,有没有什么方法来计算两个日期或jsr310两个时间之间的区别?
作为参考,下面的问题处理这个问题:
在核心Java:
在Jodatime:
回答WRT到最终JDK1.8版本。
有两个少量类- Duration
和Period
。 持续时间是基于时间(毫微秒)和周期是基于日期(年/月/日)。
时间的相同类型的两个颞对象之间的量可以通过以下两种方法(我喜欢第一)一种能够容易地计算出:
long days = ChronoUnit.DAYS.between(start, end);
long days = start.until(end, ChronoUnit.DAYS);
的Duration
的相同类型的两个时间之间的对象可以计算如下:
Duration d = Duration.between(start, end);
的Period
两者之间LocalDate
对象可以被计算如下:
Period p = Period.between(start, end);
如何做到这一点取决于正在使用哪些日期或日期时间类。
如果在实时操作系统(即,时区等这样的日期时间也可以被精确到一个确切的Instant
的时间线),你可以使用Duration
类( Javadoc中 ) -例如,
Duration diff = Duration.between(InstantProvider startInc, InstantProvider endInc);
其中一个InstantProvider能够
另外,如果你是在假设的操作时间(即没有时区等),你可以使用Period
类( Javadoc中 )获得的两个实例之间的区别LocalDate
-例如:
// diff in days, months and years:
Period diff = Period.between(LocalDate start, LocalDate end);
// diff in days:
Period diff = Period.daysBetween(LocalDate start, LocalDate end);
但是,我不知道对获得两个LocalDateTimes或LocalTimes之间的差额任何方便的方法。 但是......这可能使用周期如下进行:
// diff between LocalDateTimes:
public static Period between(LocalDateTime start, LocalDateTime end){
return Period.of(
end.getYear()-start.getYear(),
end.getMonthOfYear().getValue()-start.getMonthOfYear().getValue(),
end.getDayOfMonth()-start.getDayOfMonth(),
end.getHourOfDay()-start.getHourOfDay(),
end.getMinuteOfHour()-start.getMinuteOfHour(),
end.getSecondOfMinute()-start.getSecondOfMinute(),
end.getNanoOfSecond()-start.getNanoOfSecond()
);
}
// diff between LocalTimes:
public static Period between(LocalTime start, LocalTime end){
return Period.of(0, 0, 0,
end.getHourOfDay()-start.getHourOfDay(),
end.getMinuteOfHour()-start.getMinuteOfHour(),
end.getSecondOfMinute()-start.getSecondOfMinute(),
end.getNanoOfSecond()-start.getNanoOfSecond()
);
}