Интерфейс TemporalUnit
- Все известные классы, реализующие интерфейс:
ChronoUnit
public interface TemporalUnit
Измерение времени основано на таких единицах, как годы, месяцы, дни, часы, минуты и секунды. Реализации этого интерфейса представляют эти единицы.
Экземпляр этого интерфейса представляет саму единицу, а не количество этой единицы. См. Period — класс, представляющий количество в общепринятых единицах.
Наиболее часто используемые единицы определены в ChronoUnit. Дополнительные единицы представлены в IsoFields. Единицы также можно создавать в коде приложения, реализовав этот интерфейс.
Единица работает с использованием двойной диспетчеризации. Клиентский код вызывает методы объекта даты и времени, например LocalDateTime, которые проверяют, является ли единица ChronoUnit. Если да, объект даты и времени должен обработать ее. В противном случае вызов метода перенаправляется соответствующему методу этого интерфейса.
- Требования к реализации:
- Этот интерфейс следует реализовывать с осторожностью, чтобы обеспечить корректную работу других классов. Все реализации, экземпляры которых можно создать, должны быть final, неизменяемыми и потокобезопасными. По возможности рекомендуется использовать enum.
- С версии:
- 1.8
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
<R extends Temporal> |
addTo |
Возвращает копию указанного объекта даты и времени с добавленным указанным периодом. |
long |
between |
Вычисляет промежуток времени между двумя объектами даты и времени. |
Duration |
getDuration() |
Возвращает длительность этой единицы, которая может быть приблизительной. |
boolean |
isDateBased() |
Проверяет, представляет ли эта единица компонент даты. |
boolean |
isDurationEstimated() |
Проверяет, является ли длительность единицы приблизительной. |
default boolean |
isSupportedBy |
Проверяет, поддерживается ли эта единица указанным объектом даты и времени. |
boolean |
isTimeBased() |
Проверяет, представляет ли эта единица компонент времени. |
String |
toString() |
Возвращает описательное имя единицы. |
Подробное описание методов
getDuration
Duration getDuration()
Все единицы возвращают этим методом длительность, измеряемую в стандартных наносекундах. Длительность будет положительной и ненулевой. Например, длительность часа составляет 60 * 60 * 1,000,000,000ns.
Для некоторых единиц длительность может быть точной, а для других — приблизительной. Например, длительность дня считается приблизительной из-за возможного перехода на летнее время. Чтобы определить, является ли длительность приблизительной, используйте isDurationEstimated().
- Возвращает:
- длительность этой единицы, которая может быть приблизительной; не null
isDurationEstimated
boolean isDurationEstimated()
У всех единиц есть длительность, однако она не всегда точна. Например, длительность дня считается приблизительной из-за возможного перехода на летнее время. Этот метод возвращает true, если длительность приблизительная, и false, если она точная. Обратите внимание, что понятие точной или приблизительной длительности не учитывает високосные секунды.
- Возвращает:
- true, если длительность приблизительная, false, если она точная
isDateBased
boolean isDateBased()
Единица относится к дате, если ее можно использовать для определения значения даты. Ее длительность должна быть целым кратным продолжительности стандартного дня. Обратите внимание, что допустимо, если и isDateBased(), и isTimeBased() возвращают false, например при представлении единицы длительностью 36 часов.
- Возвращает:
- true, если эта единица является компонентом даты
isTimeBased
boolean isTimeBased()
Единица относится ко времени, если ее можно использовать для определения значения времени. Ее длительность должна без остатка делить продолжительность стандартного дня. Обратите внимание, что допустимо, если и isDateBased(), и isTimeBased() возвращают false, например при представлении единицы длительностью 36 часов.
- Возвращает:
- true, если эта единица является компонентом времени
isSupportedBy
default boolean isSupportedBy(Temporal temporal)
Проверяет, может ли реализующий интерфейс объект даты и времени прибавлять или вычитать эту единицу. Это позволяет избежать выбрасывания исключения.
Эта реализация по умолчанию получает значение с помощью Temporal.plus(long, TemporalUnit).
- Параметры:
-
temporal— проверяемый объект даты и времени; не null - Возвращает:
- true, если единица поддерживается
addTo
<R extends Temporal> R addTo(R temporal, long amount)
Добавляемый период является кратным этой единице. Например, этот метод можно использовать, чтобы добавить «3 дня» к дате: для этого нужно вызвать метод у экземпляра, представляющего «дни», передав дату и период «3». Добавляемый период может быть отрицательным, что эквивалентно вычитанию.
Этот метод можно использовать двумя равнозначными способами. Первый — вызвать его напрямую. Второй — использовать Temporal.plus(long, TemporalUnit):
// these two lines are equivalent, but the second approach is recommended temporal = thisUnit.addTo(temporal); temporal = temporal.plus(thisUnit);Рекомендуется использовать второй подход,
plus(TemporalUnit), поскольку такой код гораздо понятнее. Реализации должны выполнять запросы и вычисления с использованием единиц, доступных в ChronoUnit, или полей, доступных в ChronoField. Если единица не поддерживается, необходимо выбросить UnsupportedTemporalTypeException.
Реализации не должны изменять указанный объект даты и времени. Вместо этого необходимо вернуть скорректированную копию исходного объекта. Это обеспечивает эквивалентное и безопасное поведение для неизменяемых и изменяемых реализаций.
- Параметры типа:
R— тип объекта Temporal- Параметры:
-
temporal— корректируемый объект даты и времени; не null -
amount— количество этой единицы для добавления, положительное или отрицательное - Возвращает:
- скорректированный объект даты и времени; не null
- Выбрасывает:
-
DateTimeException— если указанное количество нельзя добавить -
UnsupportedTemporalTypeException— если единица не поддерживается объектом даты и времени
between
long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive)
Вычисляет промежуток в единицах этого типа. Начальная и конечная точки задаются объектами даты и времени, которые должны быть совместимых типов. Перед вычислением количества реализация преобразует объект второго типа в экземпляр первого типа. Результат будет отрицательным, если конечная точка предшествует начальной. Например, количество часов между двумя объектами даты и времени можно вычислить с помощью HOURS.between(startTime, endTime).
Вычисление возвращает целое число, представляющее количество полных единиц между двумя объектами даты и времени. При наличии полей меньших единиц их значения учитываются при определении итогового целого числа. Например, промежуток в часах между временем 11:30 и 13:29 составляет всего один час, поскольку до двух часов не хватает одной минуты; промежуток в месяцах между датами 2024-09-29 и 2025-02-28 (последним днем февраля) составляет 4 месяца, поскольку до пяти месяцев не хватает одного дня.
Этот метод можно использовать двумя равнозначными способами. Первый — вызвать его напрямую. Второй — использовать Temporal.until(Temporal, TemporalUnit):
// these two lines are equivalent between = thisUnit.between(start, end); between = start.until(end, thisUnit);Выбор способа зависит от того, какой из них делает код более понятным.
Например, с помощью этого метода можно вычислить количество дней между двумя датами:
long daysBetween = DAYS.between(start, end); // or alternatively long daysBetween = start.until(end, DAYS);
Реализации должны выполнять запросы и вычисления с использованием единиц, доступных в ChronoUnit, или полей, доступных в ChronoField. Если единица не поддерживается, необходимо выбросить UnsupportedTemporalTypeException. Реализации не должны изменять указанные объекты даты и времени.
- Требования к реализации:
- Реализации должны сначала проверить, имеют ли оба объекта даты и времени одинаковый тип, используя
getClass(). Если типы различаются, результат необходимо получить вызовомtemporal1Inclusive.until(temporal2Exclusive, this). - Параметры:
-
temporal1Inclusive— базовый объект даты и времени; не null -
temporal2Exclusive— другой объект даты и времени, не включительно; не null - Возвращает:
- промежуток времени между temporal1Inclusive и temporal2Exclusive в единицах этого типа; положительное значение, если temporal2Exclusive позже temporal1Inclusive, отрицательное — если раньше
- Выбрасывает:
-
DateTimeException— если количество нельзя вычислить или конечный объект даты и времени нельзя преобразовать к тому же типу, что и начальный объект -
UnsupportedTemporalTypeException— если единица не поддерживается объектом даты и времени -
ArithmeticException— при переполнении числового значения
toString
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/time/temporal/TemporalUnit.html