Метод between
Метод between класса Duration вычисляет
интервал времени между двумя временными объектами
и возвращает его в виде нового объекта Duration.
В первом параметре мы передаем начальный временной
объект (например, LocalDateTime или Instant),
во второй параметр - конечный временной объект того же типа.
Если конечный момент наступает раньше начального, результирующая
длительность будет отрицательной.
Метод является статическим, поэтому вызывается через
имя класса: Duration.between. Оба переданных объекта
должны поддерживать интерфейс Temporal, иначе
компилятор выдаст ошибку. В качестве единицы измерения
результата используется наносекундная точность, если
исходные объекты её поддерживают.
Чаще всего метод применяют с классами LocalDateTime,
LocalTime, Instant и ZonedDateTime.
Полученный объект Duration затем можно преобразовать
в секунды, миллисекунды или минуты с помощью методов
toSeconds, toMillis и toMinutes.
Синтаксис
Duration.between(start, end)
Пример
Давайте вычислим интервал между двумя моментами времени,
заданными как объекты LocalTime:
import java.time.Duration;
import java.time.LocalTime;
public class Main
{
public static void main(String[] args)
{
LocalTime start = LocalTime.of(10, 0, 0);
LocalTime end = LocalTime.of(12, 30, 0);
Duration res = Duration.between(start, end);
System.out.println(res);
}
}
Результат выполнения кода:
"PT2H30M"
Строка "PT2H30M" означает 2 часа 30 минут
(формат ISO-8601: P - период, T - время, H - часы, M - минуты).
Пример
Давайте получим длительность в секундах и миллисекундах,
используя метод between с объектами Instant:
import java.time.Duration;
import java.time.Instant;
public class Main
{
public static void main(String[] args)
{
Instant start = Instant.parse("2024-01-01T00:00:00Z");
Instant end = Instant.parse("2024-01-01T00:01:40Z");
Duration res = Duration.between(start, end);
System.out.println(res.toSeconds());
System.out.println(res.toMillis());
}
}
Результат выполнения кода:
100
100000
Пример
Если конечный момент раньше начального, метод возвращает
отрицательную длительность. Проверим это с помощью
метода isNegative:
import java.time.Duration;
import java.time.LocalDateTime;
public class Main
{
public static void main(String[] args)
{
LocalDateTime start = LocalDateTime.of(2024, 5, 10, 15, 0);
LocalDateTime end = LocalDateTime.of(2024, 5, 10, 12, 0);
Duration res = Duration.between(start, end);
System.out.println(res);
System.out.println(res.isNegative());
}
}
Результат выполнения кода:
"PT-3H"
true
Смотрите также
-
класс
Duration,
который представляет промежуток времени -
метод
ofSeconds,
который создает длительность из секунд -
метод
toSeconds,
который возвращает длительность в секундах -
метод
isNegative,
который проверяет, является ли длительность отрицательной