Интерфейс ChronoLocalDate
- Все суперинтерфейсы:
- Comparable<ChronoLocalDate>, Temporal, TemporalAccessor, TemporalAdjuster
- Все известные реализующие классы:
- HijrahDate, JapaneseDate, LocalDate, MinguoDate, ThaiBuddhistDate
public interface ChronoLocalDate extends Temporal, TemporalAdjuster, Comparable<ChronoLocalDate>
Дата без времени суток или часового пояса в произвольной хронологии, предназначенная для использования в сложных задачах глобализации.
В большинстве приложений следует объявлять сигнатуры методов, поля и переменные как LocalDate, а не этот интерфейс.
Объект ChronoLocalDate представляет собой абстрактное представление даты, где Chronology chronology, или календарная система, является подключаемым модулем. Дата определяется в терминах полей, выраженных через TemporalField, где большинство распространённых реализаций определены в ChronoField. Хронология определяет, как работает календарная система и значение стандартных полей.
Когда следует использовать этот интерфейс
Дизайн API рекомендует использоватьLocalDate вместо этого интерфейса, даже в тех случаях, когда приложению необходимо работать с несколькими календарными системами. Эта концепция может показаться неожиданной на первый взгляд, так как естественный способ глобализации приложения, поначалу, может заключаться в абстрагировании календарной системы. Однако, как показано ниже, абстрагирование календарной системы обычно является неправильным подходом, приводящим к логическим ошибкам и трудноустранимым багам. Поэтому следует рассматривать использование этого интерфейса вместо LocalDate как архитектурное решение для всего приложения.
Архитектурные вопросы для рассмотрения
Ниже приведены некоторые моменты, которые необходимо учитывать перед использованием этого интерфейса во всем приложении.1) Приложения, использующие этот интерфейс вместо обычного подхода LocalDate, имеют значительно большую вероятность появления ошибок. Это происходит потому, что используемая календарная система неизвестна на стадии разработки. Основной причиной ошибок является то, что разработчик применяет предположения, основанные на повседневном знании системы ISO, к коду, предназначенному для работы с любой произвольной календарной системой. В следующем разделе описано, как эти предположения могут создавать проблемы. Основным механизмом уменьшения этого повышенного риска ошибок является строгий процесс проверки кода. Это также следует учитывать как дополнительные затраты на обслуживание кода на протяжении всего его жизненного цикла.
2) Этот интерфейс не накладывает ограничений на неизменяемость реализаций. Хотя в примечаниях к реализации указывается, что все реализации должны быть неизменяемыми, в коде или системе типов нет ничего, что налагало бы это требование. Любой метод, объявленный как принимающий ChronoLocalDate , может поэтому получить ненадлежаще или злонамеренно написанную изменяемую реализацию.
3) Приложения, использующие этот интерфейс, должны учитывать влияние эр. LocalDate защищает пользователей от концепции эр, гарантируя, что getYear() возвращает пролептический год. Это решение гарантирует, что разработчики могут рассматривать экземпляры LocalDate как состоящие из трёх полей: года, месяца и дня месяца. В противоположность этому, пользователи этого интерфейса должны рассматривать даты как состоящие из четырёх полей: эры, года эры, месяца и дня месяца. Дополнительное поле эры часто забывают, но оно имеет жизненно важное значение для дат в произвольной календарной системе. Например, в японской календарной системе эра представляет правление императора. В любой момент, когда заканчивается одно правление и начинается другое, год эры сбрасывается до единицы.
4) Единственным согласованным международным стандартом для обмена датами между двумя системами является стандарт ISO-8601, который требует использования системы ISO календаря. Использование этого интерфейса во всём приложении неизбежно приведёт к необходимости обмена данными через сеть или границу компонента, потребовав разработку собственного протокола или формата приложения.
5) Долговременное хранение данных, например, в базе данных, практически всегда допускает только даты в системе ISO-8601 (или связанной системе юлианско-григорианского календаря). Передача дат в других календарных системах увеличивает сложность взаимодействия с хранилищем.
6) Большинство раз, передача ChronoLocalDate через приложение не требуется, как обсуждалось в последнем разделе ниже.
Ложные предположения, приводящие к ошибкам в коде для обработки дат в различных календарных системах
Как указывалось выше, существует много вопросов, которые нужно учитывать при попытке использования и обработки даты в произвольной календарной системе. Вот некоторые из ключевых проблем.Код, запрашивающий день месяца и предполагающий, что значение никогда не превысит 31, неверен. Некоторые календарные системы имеют более 31 дня в некоторых месяцах.
Код, добавляющий 12 месяцев к дате и предполагающий, что к году добавился один год, неверен. В некоторых календарных системах различное количество месяцев, например, 13 в коптском или эфиопском календаре.
Код, добавляющий один месяц к дате и предполагающий, что значение месяца увеличится на единицу или перейдёт к следующему году, неверен. В некоторых календарных системах переменное количество месяцев в году, например, в еврейском календаре.
Код, добавляющий один месяц, а затем второй, и предполагающий, что день месяца останется близким к его исходному значению, неверен. Некоторые календарные системы имеют большие различия между длиной самого длинного и самого короткого месяца. Например, в коптском или эфиопском календарях 12 месяцев по 30 дней и 1 месяц по 5 дней.
Код, добавляющий семь дней и предполагающий, что добавилась неделя, неверен. В некоторых календарных системах недели могут быть не из семи дней, например, в революционном календаре Франции.
Код, предполагающий, что потому что год date1 больше года date2, то date1 после date2, неверен. Это неверно для всех календарных систем, когда речь идёт о году эры, и особенно неверно для японской календарной системы, где год эры начинается заново с правлением каждого нового императора.
Код, рассматривающий месяц 1 и день 1 как начало года, неверен. Не все календарные системы начинают год со значением месяца 1.
В общем случае, обработка даты, и даже запрос даты, открыты для ошибок, когда календарная система неизвестна на стадии разработки. Поэтому крайне важно, чтобы код, использующий этот интерфейс, подвергался дополнительному обзору кода. Это также объясняет, почему архитектурное решение избегать использования этого типа интерфейса обычно является правильным.
Использование LocalDate вместо него
Основной альтернативой использованию этого интерфейса во всем приложении является следующее.- Объявляйте все сигнатуры методов, относящиеся к датам, в терминах
LocalDate. - Храните хронологию (календарную систему) в профиле пользователя или получите её из региональных настроек пользователя.
- Преобразуйте ISO
LocalDateв календарную систему пользователя и обратно при печати и парсинге.
Как обсуждалось выше, выполнение вычислений с датой, где правила календарной системы подключаемы, требует навыков и не рекомендуется. К счастью, необходимость выполнения вычислений с датой в произвольной календарной системе крайне редка. Например, маловероятно, что правила бизнеса системы аренды книг позволят арендовать книгу на один месяц, где значение месяца зависит от выбранной пользователем календарной системы.
Ключевой случай использования вычислений с датой в произвольной календарной системе — создание ежемесячного календаря для отображения и взаимодействия с пользователем. Опять же, это проблема пользовательского интерфейса, и использование этого интерфейса только в нескольких методах слоя пользовательского интерфейса может быть оправдано.
В любой другой части системы, где дата должна быть обработана в календарной системе, отличной от ISO, используемый случай обычно указывает календарную систему, которую следует использовать. Например, приложению может потребоваться вычислить ближайший исламский или еврейский праздник, что может потребовать обработки даты. Этот тип случая может быть обработан следующим образом:
- Начать с ISO
LocalDate, переданной методу - Преобразовать дату в альтернативную календарную систему, которая для этого случая известна, а не произвольная
- Выполнить вычисление
- Преобразовать обратно в
LocalDate
TemporalAccessor, если требуется только чтение, или используйте Temporal, если требуется чтение и запись.- Требования к реализации:
- Этот интерфейс должен быть реализован с осторожностью, чтобы обеспечить корректную работу других классов. Все реализации, которые могут быть созданы, должны быть конечными, неизменяемыми и потокобезопасными. Подклассы должны быть сериализуемыми, когда это возможно.
Дополнительные календарные системы могут быть добавлены в систему. Смотрите
Chronologyдля получения дополнительной информации. - С:
- 1.8
Методы
| Модификатор и тип | Метод и описание |
|---|---|
default Temporal |
adjustInto(Temporal temporal) Настраивает указанный временной объект для того, чтобы он имел ту же дату, что и этот объект. |
default ChronoLocalDateTime<?> |
atTime(LocalTime localTime) Объединяет эту дату со временем, чтобы создать |
default int |
compareTo(ChronoLocalDate other) Сравнивает эту дату с другой датой, включая хронологию. |
boolean |
equals(Object obj) Проверяет, равна ли эта дата другой дате, включая хронологию. |
default String |
format(DateTimeFormatter formatter) Форматирует эту дату с использованием указанного форматера. |
static ChronoLocalDate |
from(TemporalAccessor temporal) Получает экземпляр |
Chronology |
getChronology() Получает хронологию этой даты. |
default Era |
getEra() Получает эру, как определено хронологией. |
int |
hashCode() Хеш-код для этой даты. |
default boolean |
isAfter(ChronoLocalDate other) Проверяет, предшествует ли эта дата указанной дате, игнорируя хронологию. |
default boolean |
isBefore(ChronoLocalDate other) Проверяет, следует ли эта дата после указанной даты, игнорируя хронологию. |
default boolean |
isEqual(ChronoLocalDate other) Проверяет, равна ли эта дата указанной дате, игнорируя хронологию. |
default boolean |
isLeapYear() Проверяет, является ли год високосным, как определено системой календаря. |
default boolean |
isSupported(TemporalField field) Проверяет, поддерживается ли указанное поле. |
default boolean |
isSupported(TemporalUnit unit) Проверяет, поддерживается ли указанный единица измерения. |
int |
lengthOfMonth() Возвращает длительность месяца, представленного этой датой, как определено системой календаря. |
default int |
lengthOfYear() Возвращает длительность года, представленного этой датой, как определено системой календаря. |
default ChronoLocalDate |
minus(long amountToSubtract,
TemporalUnit unit) Возвращает объект того же типа, что и этот объект, с вычетом указанного периода. |
default ChronoLocalDate |
minus(TemporalAmount amount) Возвращает объект того же типа, что и этот объект, с вычетом заданного количества. |
default ChronoLocalDate |
plus(long amountToAdd,
TemporalUnit unit) Возвращает объект того же типа, что и этот объект, с добавлением указанного периода. |
default ChronoLocalDate |
plus(TemporalAmount amount) Возвращает объект того же типа, что и этот объект, с добавленной величиной. |
default <R> R |
query(TemporalQuery<R> query) Запрашивает эту дату, используя указанный запрос. |
static Comparator<ChronoLocalDate> |
timeLineOrder() Получает компаратор, сравнивающий |
default long |
toEpochDay() Преобразует эту дату в Эпохальный день. |
String |
toString() Выводит эту дату как |
ChronoPeriod |
until(ChronoLocalDate endDateExclusive) Вычисляет период между этой датой и другой датой как |
long |
until(Temporal endExclusive,
TemporalUnit unit) Вычисляет количество времени до другой даты в терминах указанной единицы измерения. |
default ChronoLocalDate |
with(TemporalAdjuster adjuster) Возвращает откорректированный объект того же типа, что и этот объект, с внесённой корректировкой. |
default ChronoLocalDate |
with(TemporalField field,
long newValue) Возвращает объект того же типа, что и этот объект, с изменённым указанным полем. |
Методы, унаследованные от интерфейса java.time.temporal.TemporalAccessor
get, getLong, range Методы
timeLineOrder
static Comparator<ChronoLocalDate> timeLineOrder()
Возвращает компаратор, сравнивающий ChronoLocalDate в порядке временной шкалы, игнорируя хронологию.
Этот компаратор отличается от сравнения в compareTo(java.time.chrono.ChronoLocalDate) тем, что он сравнивает только базовые дату, а не хронологию. Это позволяет сравнивать даты в разных календарных системах на основе позиции даты на локальной временной шкале. Базовое сравнение эквивалентно сравнению эпохи дня.
- Возвращает:
- компаратор, сравнивающий в порядке временной шкалы, игнорируя хронологию
- См. также:
-
isAfter(java.time.chrono.ChronoLocalDate),isBefore(java.time.chrono.ChronoLocalDate),isEqual(java.time.chrono.ChronoLocalDate)
from
static ChronoLocalDate from(TemporalAccessor temporal)
Получает экземпляр ChronoLocalDate из временного объекта.
Это получает локальную дату на основе указанного временного объекта. TemporalAccessor представляет собой произвольный набор информации о дате и времени, который этот фабричный метод преобразует в экземпляр ChronoLocalDate.
Преобразование извлекает и объединяет хронологию и дату из временного объекта. Поведение эквивалентно использованию Chronology.date(TemporalAccessor) с извлеченной хронологией. Реализации разрешается выполнять оптимизации, такие как доступ к тем полям, которые эквивалентны соответствующим объектам.
Этот метод соответствует подписи функционального интерфейса TemporalQuery, что позволяет использовать его в качестве запроса через ссылку на метод, ChronoLocalDate::from.
- Параметры:
-
temporal- временной объект для преобразования, не null - Возвращает:
- дата, не null
- Исключения:
-
DateTimeException- если невозможно преобразовать вChronoLocalDate - См. также:
Chronology.date(TemporalAccessor)
getChronology
Chronology getChronology()
Возвращает хронологию этой даты.
Chronology представляет собой используемую календарную систему. Эра и другие поля в ChronoField определяются хронологией.
- Возвращает:
- хронология, не null
getEra
default Era getEra()
Возвращает эру, как определено хронологией.
Эра, концептуально, является крупнейшим подразделением временной шкалы. Большинство календарных систем имеют одну эпоху, делящую временную шкалу на две эры. Однако некоторые имеют несколько эр, например, по одной для правления каждого лидера. Точное значение определяется Chronology.
Все правильно реализованные классы Era являются синглтонами, поэтому допустимо написать date.getEra() == SomeChrono.ERA_NAME).
Эта реализация по умолчанию использует Chronology.eraOf(int).
- Возвращает:
- константа эры, специфичная для хронологии, применимая к этой дате, не null
isLeapYear
default boolean isLeapYear()
Проверяет, является ли год високосным, как определено календарной системой.
Високосный год — это год, который длиннее обычного. Точное значение определяется хронологией с ограничением, что високосный год должен подразумевать длительность года больше, чем в невисокосный год.
Эта реализация по умолчанию использует Chronology.isLeapYear(long).
- Возвращает:
- true, если эта дата в високосный год, false в противном случае
lengthOfMonth
int lengthOfMonth()
Возвращает длительность месяца, представленного этой датой, как определено календарной системой.
Возвращает длительность месяца в днях.
- Возвращает:
- длительность месяца в днях
lengthOfYear
default int lengthOfYear()
Возвращает длительность года, представленного этой датой, как определено календарной системой.
Возвращает длительность года в днях.
Реализация по умолчанию использует isLeapYear() и возвращает 365 или 366.
- Возвращает:
- длительность года в днях
isSupported
default boolean isSupported(TemporalField field)
Проверяет, поддерживается ли указанное поле.
Проверяет, может ли это поле быть запрошено для этой даты. Если false, то вызов методов range, get и with(TemporalField, long) вызовет исключение.
Множество поддерживаемых полей определяется хронологией и обычно включает все ChronoField поля даты.
Если поле не является ChronoField, то результат этого метода получается путем вызова TemporalField.isSupportedBy(TemporalAccessor) с this в качестве аргумента. Поддерживается ли поле, определяется полем.
- Определено в:
-
isSupportedв интерфейсеTemporalAccessor - Параметры:
-
field- поле для проверки, null возвращает false - Возвращает:
- true, если поле можно запросить, false — если нет
isSupported
default boolean isSupported(TemporalUnit unit)
Проверяет, поддерживается ли указанный временной интервал.
Проверяет, можно ли добавить или вычесть указанный интервал из этой даты. Если false, то вызов методов plus(long, TemporalUnit) и minus вызовет исключение.
Множество поддерживаемых интервалов определяется хронологией и обычно включает все ChronoUnit временные единицы, кроме FOREVER.
Если интервал не является ChronoUnit, то результат этого метода получается путем вызова TemporalUnit.isSupportedBy(Temporal) с this в качестве аргумента. Поддерживается ли интервал, определяется интервалом.
- Определено в:
-
isSupportedв интерфейсеTemporal - Параметры:
-
unit- интервал для проверки, null возвращает false - Возвращает:
- true, если интервал можно добавить/вычесть, false — если нет
with
default ChronoLocalDate with(TemporalAdjuster adjuster)
Возвращает измененный объект того же типа, что и этот объект, с произведенной корректировкой.
Это корректирует это время-дату в соответствии с правилами указанного корректировщика. Простой корректировщик может просто установить одно из полей, например, поле года. Более сложный корректировщик может установить дату на последнее число месяца. Выбор общих корректировок представлен в TemporalAdjusters. Они включают нахождение «последнего числа месяца» и «следующей среды». Корректировщик отвечает за обработку специальных случаев, таких как переменная длина месяцев и високосные годы.
Некоторые примеры кода, показывающие, как и почему используется этот метод:
date = date.with(Month.JULY); // most key classes implement TemporalAdjuster date = date.with(lastDayOfMonth()); // static import from Adjusters date = date.with(next(WEDNESDAY)); // static import from Adjusters and DayOfWeek
- Определено в:
-
withв интерфейсеTemporal - Параметры:
-
adjuster- корректировщик для использования, не null - Возвращает:
- объект того же типа с произведенной корректировкой, не null
- Исключения:
-
DateTimeException- если корректировка невозможна -
ArithmeticException- если происходит переполнение числовых значений
with
default ChronoLocalDate with(TemporalField field,
long newValue) Возвращает объект того же типа, что и этот объект, с измененным указанным полем.
Возвращает новый объект на основе этого объекта со значением указанного поля, измененного. Например, для LocalDate, это можно использовать для установки года, месяца или числа месяца. Возвращаемый объект будет иметь тот же наблюдаемый тип, что и этот объект.
В некоторых случаях изменение поля не полностью определено. Например, если целевой объект представляет собой дату, представляющую 31 января, то изменение месяца на февраль будет неясно. В таких случаях поле отвечает за разрешение результата. Обычно оно выберет предыдущую допустимую дату, которая в этом примере будет последним допустимым числом февраля.
- Определено в:
-
withв интерфейсеTemporal - Параметры:
-
field- поле для установки в результате, не null -
newValue- новое значение поля в результате - Возвращает:
- объект того же типа со значением указанного поля, установленного, не null
- Исключения:
-
DateTimeException- если поле не может быть установлено -
UnsupportedTemporalTypeException- если поле не поддерживается -
ArithmeticException- если происходит переполнение числовых значений
plus
default ChronoLocalDate plus(TemporalAmount amount)
Возвращает объект того же типа, что и этот объект, с добавленным значением.
Это корректирует это временное значение, добавляя в соответствии с правилами указанного значения. Значение обычно является Period, но может быть любого другого типа, реализующего интерфейс TemporalAmount, например, Duration.
Некоторые примеры кода, показывающие, как и почему используется этот метод:
date = date.plus(period); // add a Period instance date = date.plus(duration); // add a Duration instance date = date.plus(workingDays(6)); // example user-written workingDays method
Обратите внимание, что вызов plus за которым следует minus не гарантирует возврат той же даты и времени.
- Определено в:
-
plusв интерфейсеTemporal - Параметры:
-
amount- значение для добавления, не null - Возвращает:
- объект того же типа с произведенной корректировкой, не null
- Исключения:
-
DateTimeException- если добавление невозможно -
ArithmeticException- если происходит переполнение числовых значений
plus
default ChronoLocalDate plus(long amountToAdd,
TemporalUnit unit) Возвращает объект того же типа, что и этот объект, с добавлением указанного периода.
Этот метод возвращает новый объект, основанный на этом объекте, с добавлением указанного периода. Например, для LocalDate, это может быть использовано для добавления определенного числа лет, месяцев или дней. Возвращаемый объект будет иметь тот же тип наблюдаемых данных, что и этот объект.
В некоторых случаях изменение поля не полностью определено. Например, если целевой объект представляет дату 31 января, то добавление одного месяца будет неясно. В таких случаях поле отвечает за разрешение результата. Обычно оно выберет предыдущую допустимую дату, которая в этом примере будет последним допустимым днем февраля.
- Определено в:
-
plusв интерфейсеTemporal - Параметры:
-
amountToAdd- количество указанной единицы для добавления, может быть отрицательным -
unit- единица количества для добавления, не null - Возвращает:
- объект того же типа с добавленным указанным периодом, не null
- Издает:
-
DateTimeException- если единица не может быть добавлена -
ArithmeticException- если произошел переполнение числовых значений
minus
default ChronoLocalDate minus(TemporalAmount amount)
Возвращает объект того же типа, что и этот объект, со вычитанием указанной величины.
Это изменяет временную метку, вычитая согласно правилам указанного количества. Количество обычно является Period, но может быть любым другим типом, реализующим интерфейс TemporalAmount, например Duration.
Некоторые примеры кода, показывающие как и почему используется этот метод:
date = date.minus(period); // subtract a Period instance date = date.minus(duration); // subtract a Duration instance date = date.minus(workingDays(6)); // example user-written workingDays method
Обратите внимание, что вызов plus за которым следует minus не гарантирует возвращение той же даты и времени.
- Определено в:
-
minusв интерфейсеTemporal - Параметры:
-
amount- величина для вычитания, не null - Возвращает:
- объект того же типа со сделанной корректировкой, не null
- Издает:
-
DateTimeException- если вычитание невозможно -
ArithmeticException- если произошло переполнение числовых значений
minus
default ChronoLocalDate minus(long amountToSubtract,
TemporalUnit unit) Возвращает объект того же типа, что и этот объект, с вычитанием указанного периода.
Этот метод возвращает новый объект, основанный на этом, с вычитанием указанного периода. Например, для LocalDate, это может быть использовано для вычитания определенного числа лет, месяцев или дней. Возвращаемый объект будет иметь тот же тип наблюдаемых данных, что и этот объект.
В некоторых случаях изменение поля не полностью определено. Например, если целевой объект представляет дату 31 марта, то вычитание одного месяца будет неясно. В таких случаях поле отвечает за разрешение результата. Обычно оно выберет предыдущую допустимую дату, которая в этом примере будет последним допустимым днем февраля.
- Определено в:
-
minusв интерфейсеTemporal - Параметры:
-
amountToSubtract- количество указанной единицы для вычитания, может быть отрицательным -
unit- единица количества для вычитания, не null - Возвращает:
- объект того же типа с вычтенным указанным периодом, не null
- Издает:
-
DateTimeException- если единица не может быть вычтена -
UnsupportedTemporalTypeException- если единица не поддерживается -
ArithmeticException- если произошел переполнение числовых значений
query
default <R> R query(TemporalQuery<R> query)
Запрашивает эту дату, используя указанный запрос.
Это запрашивает эту дату, используя указанный объект стратегии запроса. Объект TemporalQuery определяет логику, которая будет использоваться для получения результата. Прочитайте документацию запроса, чтобы понять, каким будет результат этого метода.
Результат этого метода получается путем вызова метода TemporalQuery.queryFrom(TemporalAccessor) на указанном запросе, передав this в качестве аргумента.
- Определено в:
-
queryв интерфейсеTemporalAccessor - Параметры типа:
-
R- тип результата - Параметры:
-
query- вызываемый запрос, не null - Возвращает:
- результат запроса, может быть null (определяется запросом)
- Издает:
-
DateTimeException- если запрос невозможен (определяется запросом) -
ArithmeticException- если произошел переполнение числовых значений (определяется запросом)
adjustInto
default Temporal adjustInto(Temporal temporal)
Корректирует указанный временной объект, чтобы он имел ту же дату, что и этот объект.
Это возвращает временной объект того же типа, что и входной, с датой, измененной на совпадение с этой.
Корректировка эквивалентна использованию Temporal.with(TemporalField, long), передавая ChronoField.EPOCH_DAY в качестве поля.
В большинстве случаев яснее использовать обратный порядок вызова, используя Temporal.with(TemporalAdjuster):
// these two lines are equivalent, but the second approach is recommended temporal = thisLocalDate.adjustInto(temporal); temporal = temporal.with(thisLocalDate);
Этот экземпляр неизменяем и не затрагивается этим методом.
- Определено в:
-
adjustIntoв интерфейсеTemporalAdjuster - Параметры:
-
temporal- целевой объект, который должен быть скорректирован, не null - Возвращает:
- скорректированный объект, не null
- Издает:
-
DateTimeException- если корректировка невозможна -
ArithmeticException- если произошел переполнение числовых значений
until
long until(Temporal endExclusive,
TemporalUnit unit) Вычисляет количество времени до другой даты в терминах указанной единицы.
Это вычисляет количество времени между двумя объектами ChronoLocalDate в терминах одной единицы TemporalUnit. Начальная и конечная точки — this и указанная дата. Результат будет отрицательным, если конец предшествует началу. Значение Temporal , переданное в этот метод, преобразуется в ChronoLocalDate с помощью Chronology.date(TemporalAccessor). Вычисление возвращает целое число, представляющее количество полных единиц между двумя датами. Например, количество дней между двумя датами можно рассчитать, используя startDate.until(endDate, DAYS).
Существуют два равнозначных способа использования этого метода. Первый — вызвать этот метод. Второй — использовать TemporalUnit.between(Temporal, Temporal):
// these two lines are equivalent amount = start.until(end, MONTHS); amount = MONTHS.between(start, end);Выбор должен быть сделан на основе того, что делает код более читабельным.
Вычисление реализовано в этом методе для ChronoUnit. Единицы DAYS, WEEKS, MONTHS, YEARS, DECADES, CENTURIES, MILLENNIA и ERAS должны поддерживаться всеми реализациями. Другие значения ChronoUnit будут вызывать исключение.
Если единица не является ChronoUnit, то результат этого метода получается путем вызова TemporalUnit.between(Temporal, Temporal), передав this в качестве первого аргумента и преобразованное входное временное значение в качестве второго аргумента.
Этот экземпляр неизменяем и не затрагивается этим методом.
- Определено в:
-
untilв интерфейсеTemporal - Параметры:
-
endExclusive- конечная дата, исключая, которая преобразуется вChronoLocalDateв той же хронологии, не null -
unit- единица измерения количества, не null - Возвращает:
- количество времени между этой датой и конечной датой
- Издает:
-
DateTimeException- если количество не может быть рассчитано или конечная временная метка не может быть преобразована вChronoLocalDate -
UnsupportedTemporalTypeException- если единица не поддерживается -
ArithmeticException- если произошел переполнение числовых значений
until
ChronoPeriod until(ChronoLocalDate endDateExclusive)
Вычисляет период между этой датой и другой датой в виде ChronoPeriod.
Это вычисляет период между двумя датами. Все предоставленные хронологии вычисляют период, используя годы, месяцы и дни, однако API ChronoPeriod позволяет представлять период с использованием других единиц.
Начальная и конечная точки — this и указанная дата. Результат будет отрицательным, если конец предшествует началу. Отрицательный знак будет одинаковым для каждого из года, месяца и дня.
Вычисление выполняется с использованием хронологии этой даты. При необходимости, входная дата будет преобразована для соответствия.
Этот экземпляр неизменяем и не затрагивается этим методом.
- Параметры:
-
endDateExclusive- конечная дата, исключая, которая может быть в любой хронологии, не null - Возвращает:
- период между этой датой и конечной датой, не null
- Издает:
-
DateTimeException- если период не может быть рассчитан -
ArithmeticException- если произошел переполнение числовых значений
format
default String format(DateTimeFormatter formatter)
Форматирует эту дату, используя указанный форматировщик.
Эта дата будет передана форматировщику для создания строки.
Реализация по умолчанию должна работать следующим образом:
return formatter.format(this);
- Параметры:
-
formatter- форматировщик для использования, не null - Возвращает:
- строка отформатированной даты, не null
- Издает:
-
DateTimeException- если произошла ошибка во время печати
atTime
default ChronoLocalDateTime<?> atTime(LocalTime localTime)
Комбинирует эту дату со временем, чтобы создать ChronoLocalDateTime.
Это возвращает ChronoLocalDateTime , сформированную из этой даты в указанное время. Все возможные комбинации даты и времени допустимы.
- Параметры:
-
localTime- локальное время для использования, не null - Возвращает:
- локальное дата-время, сформированное из этой даты и указанного времени, не null
toEpochDay
default long toEpochDay()
Преобразует эту дату в эпохальный день.
Эпохальный день — это просто увеличивающаяся счётная последовательность дней, где день 0 — 1970-01-01 (ISO). Это определение одинаково для всех хронологий, что позволяет выполнить преобразование.
Эта реализация по умолчанию обращается к полю EPOCH_DAY.
- Возвращает:
- эквивалент этой даты в эпохальном дне
compareTo
default int compareTo(ChronoLocalDate other)
Сравнивает эту дату с другой датой, включая хронологию.
Сравнение выполняется сначала по дате на основе временной шкалы, затем по хронологии. Оно «согласуется с equals», как определено в Comparable.
Например, порядок сравнения такой:
2012-12-03 (ISO)2012-12-04 (ISO)2555-12-04 (ThaiBuddhist)2012-12-05 (ISO)
Если все сравниваемые объекты даты относятся к одной хронологии, дополнительная проверка хронологии не требуется, и используется только локальная дата. Для сравнения дат двух TemporalAccessor объектов, включая даты в двух разных хронологиях, используйте ChronoField.EPOCH_DAY в качестве компаратора.
Эта реализация по умолчанию выполняет вышеописанное сравнение.
- Определено в:
-
compareToв интерфейсеComparable<ChronoLocalDate> - Параметры:
-
other— другая дата для сравнения, не null - Возвращает:
- значение компаратора, отрицательное, если меньше, положительное, если больше
isAfter
default boolean isAfter(ChronoLocalDate other)
Проверяет, находится ли эта дата после указанной даты, игнорируя хронологию.
Этот метод отличается от сравнения в compareTo(java.time.chrono.ChronoLocalDate) тем, что сравнивает только базовую дату, а не хронологию. Это позволяет сравнивать даты в разных календарных системах на основе их положения на временной шкале. Это эквивалентно использованию date1.toEpochDay() > date2.toEpochDay().
Эта реализация по умолчанию выполняет сравнение на основе эпохального дня.
- Параметры:
-
other— другая дата для сравнения, не null - Возвращает:
- true, если эта дата следует за указанной
isBefore
default boolean isBefore(ChronoLocalDate other)
Проверяет, находится ли эта дата до указанной даты, игнорируя хронологию.
Этот метод отличается от сравнения в compareTo(java.time.chrono.ChronoLocalDate) тем, что сравнивает только базовую дату, а не хронологию. Это позволяет сравнивать даты в разных календарных системах на основе их положения на временной шкале. Это эквивалентно использованию date1.toEpochDay() < date2.toEpochDay().
Эта реализация по умолчанию выполняет сравнение на основе эпохального дня.
- Параметры:
-
other— другая дата для сравнения, не null - Возвращает:
- true, если эта дата предшествует указанной
isEqual
default boolean isEqual(ChronoLocalDate other)
Проверяет, равна ли эта дата указанной дате, игнорируя хронологию.
Этот метод отличается от сравнения в compareTo(java.time.chrono.ChronoLocalDate) тем, что сравнивает только базовую дату, а не хронологию. Это позволяет сравнивать даты в разных календарных системах на основе их положения на временной шкале. Это эквивалентно использованию date1.toEpochDay() == date2.toEpochDay().
Эта реализация по умолчанию выполняет сравнение на основе эпохального дня.
- Параметры:
-
other— другая дата для сравнения, не null - Возвращает:
- true, если базовая дата равна указанной дате
equals
boolean equals(Object obj)
Проверяет, равна ли эта дата другой дате, включая хронологию.
Сравнивает эту дату с другой, гарантируя, что дата и хронология совпадают.
Для сравнения дат двух TemporalAccessor объектов, включая даты в двух разных хронологиях, используйте ChronoField.EPOCH_DAY в качестве компаратора.
- Переопределяет:
-
equalsв классеObject - Параметры:
-
obj— объект для проверки, null возвращает false - Возвращает:
- true, если эта дата равна другой дате
- См. также:
-
Object.hashCode(),HashMap
hashCode
int hashCode()
Хеш-код для этой даты.
- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- подходящий хеш-код
- См. также:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
toString
String toString()
Выводит эту дату в виде String.
Вывод будет включать полную локальную дату.
© 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.