0

Вычисление дней, часов и минут между двумя моментами времени

27

У меня есть объект Instant, отформатированный следующим образом:

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

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

Теперь я хочу вычислить разницу между этим instant и текущим временем Instant.now(), выраженную в днях, часах и минутах (если возможно). Например, как-то так:

// для дней
String daysBetween = Instant.now() - instant;

Могу ли я это сделать? Как правильно рассчитать разницу между двумя объектами Instant?

1 ответ(ов)

1

Для вычисления дней, часов и/или минут между двумя объектами Instant в Java, вы можете использовать следующий код:

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

// Если вам нужно получить одно из значений
System.out.println(ChronoUnit.DAYS.between(instant1, instant2));    // вывод: 65
System.out.println(ChronoUnit.HOURS.between(instant1, instant2));   // вывод: 1570
System.out.println(ChronoUnit.MINUTES.between(instant1, instant2)); // вывод: 94243

// Или можно использовать альтернативный синтаксис (это то же самое)
System.out.println(instant1.until(instant2, ChronoUnit.DAYS));    // вывод: 65
System.out.println(instant1.until(instant2, ChronoUnit.HOURS));   // вывод: 1570
System.out.println(instant1.until(instant2, ChronoUnit.MINUTES)); // вывод: 94243

// Или воспользуйтесь классом Duration
Duration duration = Duration.between(instant1, instant2);
System.out.println(duration.toDays());    // вывод: 65
System.out.println(duration.toHours());   // вывод: 1570
System.out.println(duration.toMinutes()); // вывод: 94243

// В Java 9+ класс Duration может предоставить части, чтобы их можно было использовать вместе
System.out.println(duration.toDaysPart());    // вывод: 65
System.out.println(duration.toHoursPart());   // вывод: 10
System.out.println(duration.toMinutesPart()); // вывод: 43

// Либо вы можете самостоятельно вычислить их, используя эпоху в секундах
long seconds = instant2.getEpochSecond() - instant1.getEpochSecond();
System.out.println(seconds / 86400);     // вывод: 65
System.out.println(seconds / 3600 % 24); // вывод: 10
System.out.println(seconds / 60 % 60);   // вывод: 43

Как видно из последних двух примеров, разница между заданными датами составляет 65 дней, 10 часов и 43 минуты.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь