Интерфейс TemporalUnit
- Все известные реализующие классы:
- ChronoUnit
public interface TemporalUnit
Единица измерения времени, например, Дни или Часы.
Измерение времени основано на единицах, таких как годы, месяцы, дни, часы, минуты и секунды. Реализации этого интерфейса представляют эти единицы.
Экземпляр этого интерфейса представляет саму единицу, а не количество единиц. См. Period для класса, представляющего количество в терминах общих единиц.
Наиболее часто используемые единицы определены в ChronoUnit. Дополнительные единицы предоставлены в IsoFields. Единицы также могут быть написаны кодом приложения путем реализации этого интерфейса.
Единица работает с помощью двойного диспетчера. Клиентский код вызывает методы на объекте времени, например LocalDateTime, которые проверяют, является ли единица ChronoUnit. Если это так, то объект времени должен обработать ее. В противном случае вызов метода перенаправляется на соответствующий метод в этом интерфейсе.
- Требования к реализации:
- Этот интерфейс должен быть реализован с осторожностью, чтобы обеспечить правильную работу других классов. Все реализуемые классы, которые могут быть созданы, должны быть final, неизменяемыми и потокобезопасными. Рекомендуется использовать перечисление, где это возможно.
- С:
- 1.8
Методы
| Модификатор и тип | Метод и описание |
|---|---|
<R extends Temporal> |
addTo(R temporal,
long amount) Возвращает копию указанного объекта temporal с добавленным указанным периодом. |
long |
between(Temporal temporal1Inclusive,
Temporal temporal2Exclusive) Вычисляет количество времени между двумя объектами temporal. |
Duration |
getDuration() Получает длительность этой единицы, которая может быть приблизительной. |
boolean |
isDateBased() Проверяет, представляет ли эта единица компонент даты. |
boolean |
isDurationEstimated() Проверяет, является ли продолжительность единицы приблизительной. |
default boolean |
isSupportedBy(Temporal temporal) Проверяет, поддерживается ли эта единица указанным объектом temporal. |
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.
Это проверяет, может ли реализуемый объект времени добавлять/вычитать эту единицу. Это можно использовать для предотвращения возникновения исключения.
Эта реализация по умолчанию выводит значение с помощью Temporal.plus(long, TemporalUnit).
- Параметры:
-
temporal- объект temporal для проверки, не null - Возвращает:
- true, если единица поддерживается
addTo
<R extends Temporal> R addTo(R temporal,
long amount) Возвращает копию указанного объекта temporal с добавленным указанным периодом.
Добавляемый период является кратным этой единице. Например, этот метод можно использовать для добавления «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.
Реализации не должны изменять указанный объект temporal. Вместо этого должен быть возвращен скорректированный экземпляр оригинала. Это обеспечивает эквивалентное, безопасное поведение для неизменяемых и изменяемых реализаций.
- Параметры типа:
-
R- тип объекта Temporal - Параметры:
-
temporal- объект temporal для корректировки, не null -
amount- количество этой единицы для добавления, положительное или отрицательное - Возвращает:
- скорректированный объект temporal, не null
- Исключения:
-
DateTimeException- если количество нельзя добавить -
UnsupportedTemporalTypeException- если единица не поддерживается объектом temporal
between
long between(Temporal temporal1Inclusive,
Temporal temporal2Exclusive) Вычисляет количество времени между двумя объектами temporal.
Это вычисляет количество в терминах этой единицы. Точки начала и окончания предоставляются как объекты temporal и должны быть совместимых типов. Реализация преобразует второй тип в экземпляр первого типа перед вычислением количества. Результат будет отрицательным, если конец находится перед началом. Например, количество часов между двумя объектами temporal можно вычислить, используя 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. Реализации не должны изменять указанные объекты temporal.
- Требования к реализации:
- Реализации должны начать с проверки, имеют ли два объекта temporal одинаковый тип с помощью
getClass(). Если нет, то результат должен быть получен вызовомtemporal1Inclusive.until(temporal2Exclusive, this). - Параметры:
-
temporal1Inclusive- базовый объект temporal, не null -
temporal2Exclusive- другой объект temporal, исключая, не null - Возвращает:
- количество времени между temporal1Inclusive и temporal2Exclusive в терминах этой единицы; положительное, если temporal2Exclusive позже, чем temporal1Inclusive, отрицательное, если раньше
- Исключения:
-
DateTimeException- если количество нельзя вычислить или конечный объект temporal нельзя преобразовать в тот же тип, что и начальный объект temporal -
UnsupportedTemporalTypeException- если единица не поддерживается объектом temporal -
ArithmeticException- если происходит переполнение чисел
toString
String toString()
Получает описательное имя для единицы.
Это должно быть во множественном числе и с заглавной буквой, например, 'Дни' или 'Минуты'.
© 1993, 2020, 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.