Интерфейс TemporalUnit
- Все известные реализующие классы:
ChronoUnit
public interface TemporalUnit
Единица измерения времени, например, Дни или Часы.
Измерение времени основано на единицах, таких как годы, месяцы, дни, часы, минуты и секунды. Реализации этого интерфейса представляют эти единицы.
Экземпляр этого интерфейса представляет саму единицу, а не количество единиц. См. Period для класса, представляющего количество в терминах общих единиц.
Наиболее часто используемые единицы определены в ChronoUnit. Дополнительные единицы предоставлены в IsoFields. Единицы также могут быть определены кодом приложения путём реализации этого интерфейса.
Единица работает с помощью двойной диспетчеризации. Клиентский код вызывает методы на временной объекте, например, LocalDateTime, которые проверяют, является ли единица ChronoUnit. Если это так, то временной объект должен обработать её. В противном случае вызов метода перенаправляется на соответствующий метод в этом интерфейсе.
- Требования к реализации:
- Этот интерфейс должен быть реализован с осторожностью, чтобы обеспечить правильную работу других классов. Все реализуемые классы, которые могут быть созданы, должны быть конечными, неизменяемыми и потокобезопасными. Рекомендуется использовать перечисление (enum), где это возможно.
- С:
- 1.8
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
<R extends Temporal> | addTo(R temporal,
long amount) | Возвращает копию указанного временного объекта с добавленным указанным периодом. |
long | between(Temporal temporal1Inclusive,
Temporal temporal2Exclusive) | Вычисляет количество времени между двумя временными объектами. |
Duration | getDuration() | Получает продолжительность этой единицы, которая может быть приблизительной. |
boolean | isDateBased() | Проверяет, представляет ли эта единица компонент даты. |
boolean | isDurationEstimated() | Проверяет, является ли продолжительность единицы приблизительной. |
default boolean | isSupportedBy(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.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()
Получает описательное имя единицы.
Оно должно быть во множественном числе и с заглавной первой буквой, например, 'Дни' или 'Минуты'.
© 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/temporal/TemporalUnit.html