不幸的是,似乎也没有跨时间的周期类,因此你可能必须自己进行计算。
幸运的是,日期和时间类具有许多实用程序方法,可以在某种程度上简化此过程。这是一种计算差异的方法,尽管不一定最快:
LocalDateTime fromDateTime = LocalDateTime.of(1984, 12, 16, 7, 45, 55);LocalDateTime toDateTime = LocalDateTime.of(2014, 9, 10, 6, 40, 45);LocalDateTime tempDateTime = LocalDateTime.from( fromDateTime );long years = tempDateTime.until( toDateTime, ChronoUnit.YEARS );tempDateTime = tempDateTime.plusYears( years );long months = tempDateTime.until( toDateTime, ChronoUnit.MonTHS );tempDateTime = tempDateTime.plusMonths( months );long days = tempDateTime.until( toDateTime, ChronoUnit.DAYS );tempDateTime = tempDateTime.plusDays( days );long hours = tempDateTime.until( toDateTime, ChronoUnit.HOURS );tempDateTime = tempDateTime.plusHours( hours );long minutes = tempDateTime.until( toDateTime, ChronoUnit.MINUTES );tempDateTime = tempDateTime.plusMinutes( minutes );long seconds = tempDateTime.until( toDateTime, ChronoUnit.SEConDS );System.out.println( years + " years " + months + " months " + days + " days " + hours + " hours " + minutes + " minutes " + seconds + " seconds.");//prints: 29 years 8 months 24 days 22 hours 54 minutes 50 seconds.
基本思想是:创建一个临时的开始日期并获得整年的结束时间。然后,根据年数调整该日期,以使开始日期小于结束日期。对每个时间单位以降序重复该操作。
最后免责声明:我没有考虑不同的时区(两个日期都应该在同一时区中),也没有测试/检查夏令时或日历中的其他更改(例如萨摩亚中的时区更改)影响此计算。因此,请谨慎使用。



