Java jsr310: difference between dates and times

2019-09-18 11:48发布

还有的与计算两个日期或Java中两个时间之间的区别对待SO问题太多了。 许多答案指出与核心Java日期类的问题,并使用Jodatime建议,但据我所知,有没有暗示了如何使用jsr310做到这一点。

那么,有没有什么方法来计算两个日期或jsr310两个时间之间的区别?


作为参考,下面的问题处理这个问题:

在核心Java:

  • 两个日期时间之间的毫秒

在Jodatime:

  • 天中间人两个日期
  • 两个日期时间之间的时间间隔

Answer 1:

回答WRT到最终JDK1.8版本。

有两个少量类- DurationPeriod 。 持续时间是基于时间(毫微秒)和周期是基于日期(年/月/日)。

时间的相同类型的两个颞对象之间的量可以通过以下两种方法(我喜欢第一)一种能够容易地计算出:

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);


Answer 2:

如何做到这一点取决于正在使用哪些日期或日期时间类。

如果在实时操作系统(即,时区等这样的日期时间也可以被精确到一个确切的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()
  );
}


文章来源: Java jsr310: difference between dates and times