计算两个时间点之间的天数、小时数和分钟数

39

我有一个格式为这样的即时对象:

DateTimeFormatter formatter = 
 DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT )
                                 .withLocale( Locale.UK )
                                 .withZone( ZoneId.of("UTC"));

String instant = formatter.format(Instant.now()).toString();

我想计算当前时刻与某一特定时刻之间的天数、小时数和分钟数(如有可能)。可以使用类似以下代码实现:

// for days
String daysBetween = Instant.now() - instant;

我可以这样做吗?


使用 Duration.between()。如果你想要一个字符串,可以搜索类似于 [java format duration] 的内容。 - Ole V.V.
1个回答

104

计算两个 Instant 对象之间的 天数小时数和/或分钟数:

Instant instant1 = Instant.parse("2019-02-14T18:42:00Z");
Instant instant2 = Instant.parse("2019-04-21T05:25:00Z");

// If you only need one of them
System.out.println(ChronoUnit.DAYS.between(instant1, instant2));    // prints: 65
System.out.println(ChronoUnit.HOURS.between(instant1, instant2));   // prints: 1570
System.out.println(ChronoUnit.MINUTES.between(instant1, instant2)); // prints: 94243

// Or use alternate syntax (it's the same thing)
System.out.println(instant1.until(instant2, ChronoUnit.DAYS));    // prints: 65
System.out.println(instant1.until(instant2, ChronoUnit.HOURS));   // prints: 1570
System.out.println(instant1.until(instant2, ChronoUnit.MINUTES)); // prints: 94243

// Or use Duration
Duration duration = Duration.between(instant1, instant2);
System.out.println(duration.toDays());    // prints: 65
System.out.println(duration.toHours());   // prints: 1570
System.out.println(duration.toMinutes()); // prints: 94243

// In Java 9+, Duration can give them as parts to be used together
System.out.println(duration.toDaysPart());    // prints: 65
System.out.println(duration.toHoursPart());   // prints: 10
System.out.println(duration.toMinutesPart()); // prints: 43

// Or you can calculate the parts yourself, using epoch seconds
long seconds = instant2.getEpochSecond() - instant1.getEpochSecond();
System.out.println(seconds / 86400);     // prints: 65
System.out.println(seconds / 3600 % 24); // prints: 10
System.out.println(seconds / 60 % 60);   // prints: 43

从上面两个示例中可以看出,给定的日期之间的差异为 65天10小时43分钟


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接