Интерфейс 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
String toString()
Оно должно быть во множественном числе и с большой первой буквой, например, 'Дни' или 'Минуты'.
- Переопределяет:
-
toStringв классеObject - Возвращает:
- имя этого элемента, не null
© 1993, 2023, 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/21/docs/api/java.base/java/time/temporal/TemporalUnit.html