在Java中,有大量这样的问题处理计算两个日期或两次之间的差异。许多答案都指出了核心Java类的问题,并建议使用Jodatime,但是AFAIK,没有人建议如何使用jsr310来做到这一点。
那么,在jsr310中是否有任何方法来计算两个日期或两次之间的差异?
以下问题可供参考:
在核心Java中:
在Jodatime:
发布于 2012-06-25 10:31:51
如何做到这一点取决于所使用的日期或日期时间类。
如果您是实时操作(例如,带有时区等,以便将日期时间精确地指向时间线上的确切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()
);
}发布于 2013-04-09 14:35:49
回答wrt到最后的JDK1.8版本。
有两个量程类- Duration和Period。持续时间是基于时间的(nanos),期间是基于日期的(年/月/日)。
同一类型的两个时态对象之间的时间量可以通过两种方法中的一种很容易地计算出来(我更喜欢第一种):
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);https://stackoverflow.com/questions/11187639
复制相似问题