ZoneId zone = ZoneId.of("America/Chicago");
Instant today = Instant.parse("2018-07-18T17:15:00Z");
Instant expiration1 = Instant.parse("2018-07-19T05:00:00Z");
ZonedDateTime todayInZone = today.atZone(zone);
ZonedDateTime expirationInZone = expiration1.atZone(zone);
long daysTilExp = todayInZone.toLocalDate().until(expirationInZone, ChronoUnit.DAYS);
System.out.format("From %s to %s is %d day/s.%n",
todayInZone, expirationInZone, daysTilExp);
从 2018-07-18T12:15-05:00[America/Chicago] 到 2018-07-19T00:00-05:00[America/Chicago] 为 1 天/秒。
所以从 7 月 18 日到 19 日是 1 天。如果您希望两者都包含在计数中,只需加 1。
由于地球上任何地方的日期都不会相同,因此在不同时区计算天数是不同的。尝试更改时区并保持相同的时刻:
ZoneId zone = ZoneId.of("Asia/Tokyo");
这将输出更改为
从 2018-07-19T02:15+09:00[Asia/Tokyo] 到 2018-07-19T14:00+09:00[Asia/Tokyo] 为 0 天/秒。
从输出中可以看出,这是因为现在日本已经是 7 月 19 日,所以它从 7 月 19 日到 19 日计数并得到 0。
所以你需要选择你想要计数的时区。