Вычисление дней, часов и минут между двумя моментами времени
У меня есть объект 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 ответ(ов)
Для вычисления дней, часов и/или минут между двумя объектами 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 минуты.
Преобразование строки в дату в Java
Показ сообщений "Утро", "День", "Вечер", "Ночь" в зависимости от времени в Java
Сортировка ArrayList пользовательских объектов по свойству
Как получить день недели по заданной дате?
Java 8 – Создание Instant из LocalDateTime с учетом часового пояса