Интерфейс TemporalUnit
- Все известные реализующие классы:
ChronoUnit
public interface TemporalUnit
Измерение времени основано на единицах, таких как годы, месяцы, дни, часы, минуты и секунды. Реализации этого интерфейса представляют эти единицы.
Экземпляр этого интерфейса представляет саму единицу, а не количество единиц. Смотрите Period для класса, представляющего количество в терминах общих единиц.
Наиболее часто используемые единицы определены в ChronoUnit. Дополнительные единицы предоставляются в IsoFields. Единицы также могут быть написаны кодом приложения путем реализации этого интерфейса.
Единица работает с использованием двойной отправки. Клиентский код вызывает методы на объекте времени, таком как LocalDateTime, которые проверяют, является ли единица ChronoUnit. Если это так, то объект времени должен обработать ее. В противном случае вызов метода повторно отправляется в соответствующий метод в этом интерфейсе.
- Требования к реализации:
- Этот интерфейс должен быть реализован с осторожностью, чтобы гарантировать правильную работу других классов. Все реализуемые классы, которые можно создать, должны быть final, неизменяемыми и потокобезопасными. Рекомендуется использовать перечисление, где это возможно.
- С:
- 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— временной объект для корректировки, не null -
amount— количество этого элемента для добавления, положительное или отрицательное - Возвращает:
- откорректированный временной объект, не null
- Исключения:
-
DateTimeException— если количество не может быть добавлено -
UnsupportedTemporalTypeException— если элемент не поддерживается временным объектом
between
long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive)
Вычисляет количество в терминах этого элемента. Начальная и конечная точки предоставляются как временные объекты и должны быть совместимого типа. Реализация преобразует вторую точку в экземпляр первого типа перед вычислением количества. Результат будет отрицательным, если конечная точка находится до начальной. Например, количество часов между двумя временными объектами можно вычислить, используя HOURS.between(startTime, endTime).
Вычисление возвращает целое число, представляющее количество полных элементов между двумя временными точками. Например, количество часов между временами 11:30 и 13:29 будет только один час, так как это на одну минуту меньше двух часов.
Есть два эквивалентных способа использования этого метода. Первый — вызвать этот метод напрямую. Второй — использовать 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/time/temporal/TemporalUnit.html