Интерфейс 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, является некорректным. Это неверно для всех календарных систем, когда речь идёт о годе эры, и особенно неверно для японской календарной системы, где год эры сбрасывается с правлением каждого нового императора.
Код, рассматривающий месяц один и день один как начало года, является некорректным. Не все календарные системы начинают год, когда значение месяца равно одному.
В общем случае манипулирование датой, а также даже запрос даты открыты для ошибок, когда календарная система неизвестна на этапе разработки. Именно поэтому код, использующий этот интерфейс, должен проходить дополнительную проверку. Это также причина, по которой архитектурное решение, исключающее этот тип интерфейса, обычно является правильным.
Использование LocalDate вместо
Основная альтернатива использованию этого интерфейса во всём приложении заключается в следующем.- Объявлять все сигнатуры методов, относящиеся к датам, в терминах
LocalDate. - Хранить календарь (календарную систему) в профиле пользователя или получать календарь из региональных настроек пользователя.
- Преобразовывать ISO
LocalDateв предпочитаемую календарную систему пользователя и обратно при печати и парсинге.
Как обсуждалось выше, выполнение вычислений с датой, правила календарной системы которой настраиваются, требует навыков и не рекомендуется. К счастью, необходимость выполнения вычислений с датой в произвольной календарной системе чрезвычайно редка. Например, маловероятно, что бизнес-правила схемы аренды книг позволят арендовать книги на один месяц, где значение месяца зависит от предпочитаемой календарной системы пользователя.
Одним из ключевых случаев использования вычислений с датой в произвольной календарной системе является создание ежемесячного календаря для отображения и взаимодействия с пользователем. Опять же, это проблема пользовательского интерфейса, и использование этого интерфейса только в нескольких методах слоя пользовательского интерфейса может быть оправдано.
В любой другой части системы, где дата должна быть обработана в календарной системе, отличной от ISO, сценарий использования обычно указывает календарную систему для использования. Например, приложению может потребоваться вычислить ближайший исламский или еврейский праздник, что может потребовать обработки даты. Такой сценарий использования можно обработать следующим образом:
- начать с переданной в метод ISO
LocalDate - преобразовать дату в альтернативную календарную систему, которая в этом случае известна, а не произвольная
- выполнить вычисление
- преобразовать обратно в
LocalDate
TemporalAccessor, если требуется только чтение, или используйте Temporal, если требуется чтение и запись.- Требования к реализации:
- Этот интерфейс должен быть реализован с осторожностью, чтобы обеспечить правильную работу других классов. Все реализуемые классы должны быть final, неизменяемыми и потокобезопасными. Подклассы должны быть сериализуемыми, где это возможно.
В систему могут быть добавлены дополнительные календарные системы. Подробнее см.
Chronology. - С:
- 1.8
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
default Temporal |
adjustInto |
Настраивает указанный временной объект так, чтобы он имел ту же дату, что и этот объект. |
default ChronoLocalDateTime |
atTime |
Объединяет эту дату со временем, чтобы создать ChronoLocalDateTime. |
default int |
compareTo |
Сравнивает эту дату с другой датой, включая хронологию. |
boolean |
equals |
Проверяет, равна ли эта дата другой дате, включая хронологию. |
default String |
format |
Форматирует эту дату с помощью указанного форматера. |
static ChronoLocalDate |
from |
Получает экземпляр ChronoLocalDate из временного объекта. |
Chronology |
getChronology() |
Получает хронологию этой даты. |
default Era |
getEra() |
Получает эру, как определено хронологией. |
int |
hashCode() |
Хеш-код для этой даты. |
default boolean |
isAfter |
Проверяет, следует ли эта дата после указанной даты, игнорируя хронологию. |
default boolean |
isBefore |
Проверяет, предшествует ли эта дата указанной дате, игнорируя хронологию. |
default boolean |
isEqual |
Проверяет, равна ли эта дата указанной дате, игнорируя хронологию. |
default boolean |
isLeapYear() |
Проверяет, является ли год високосным, как определено системой календаря. |
default boolean |
isSupported |
Проверяет, поддерживается ли указанное поле. |
default boolean |
isSupported |
Проверяет, поддерживается ли указанная единица. |
int |
lengthOfMonth() |
Возвращает длину месяца, представленного этой датой, как определено системой календаря. |
default int |
lengthOfYear() |
Возвращает длину года, представленного этой датой, как определено системой календаря. |
default ChronoLocalDate |
minus |
Возвращает объект того же типа, что и этот объект, с вычетом указанного периода. |
default ChronoLocalDate |
minus |
Возвращает объект того же типа, что и этот объект, с вычетом значения. |
default ChronoLocalDate |
plus |
Возвращает объект того же типа, что и этот объект, с добавлением указанного периода. |
default ChronoLocalDate |
plus |
Возвращает объект того же типа, что и этот объект, с добавлением значения. |
default <R> R |
query |
Обрабатывает эту дату с помощью указанного запроса. |
static Comparator |
timeLineOrder() |
Получает компаратор, сравнивающий ChronoLocalDate в порядке временной шкалы, игнорируя хронологию. |
default long |
toEpochDay() |
Преобразует эту дату в Эпоху Дня. |
String |
toString() |
Выводит эту дату как String. |
ChronoPeriod |
until |
Вычисляет период между этой датой и другой датой как ChronoPeriod. |
long |
until |
Вычисляет количество времени до другой даты в терминах указанной единицы. |
default ChronoLocalDate |
with |
Возвращает измененный объект того же типа, что и этот объект, с произведённым изменением. |
default ChronoLocalDate |
with |
Возвращает объект того же типа, что и этот объект, с изменённым указанным полем. |
Методы, объявленные в интерфейсе java.time.temporal.TemporalAccessor
get, getLong, range
Подробное описание методов
timeLineOrder
static Comparator<ChronoLocalDate> timeLineOrder()
ChronoLocalDate в порядке временной шкалы, игнорируя хронологию. Этот компаратор отличается от сравнения в compareTo(java.time.chrono.ChronoLocalDate) тем, что он сравнивает только базовую дату, а не хронологию. Это позволяет сравнивать даты в разных календарных системах на основе положения даты на локальной временной шкале. Базовое сравнение эквивалентно сравнению эпохальных дней.
- Возвращает:
- компаратор, сравнивающий в порядке временной шкалы, игнорируя хронологию
- См. также:
from
static ChronoLocalDate from(TemporalAccessor temporal)
ChronoLocalDate из временного объекта. Это получает локальную дату на основе указанного временного объекта. TemporalAccessor представляет собой произвольную информацию о дате и времени, которую этот фабричный метод преобразует в экземпляр ChronoLocalDate.
Преобразование извлекает и объединяет хронологию и дату из временного объекта. Поведение эквивалентно использованию Chronology.date(TemporalAccessor) с извлеченной хронологией. Реализации разрешается выполнять оптимизации, например, обращаться к полям, которые эквивалентны соответствующим объектам.
Этот метод соответствует сигнатуре функционального интерфейса TemporalQuery, что позволяет использовать его в качестве запроса с помощью ссылки на метод, ChronoLocalDate::from.
- Параметры:
-
temporal- временной объект для преобразования, не null - Возвращает:
- дата, не null
- Исключения:
-
DateTimeException- если невозможно преобразовать вChronoLocalDate - См. также:
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- если происходит переполнение числовых значений
плюс
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- если происходит переполнение числовых значений
плюс
default ChronoLocalDate plus(long amountToAdd, TemporalUnit unit)
Этот метод возвращает новый объект, основанный на этом объекте, с добавленным указанным периодом. Например, для LocalDate, это можно использовать для добавления количества лет, месяцев или дней. Возвращаемый объект будет иметь тот же наблюдаемый тип, что и этот объект.
В некоторых случаях изменение поля не полностью определено. Например, если целевой объект — дата, представляющая 31 января, то добавление одного месяца будет неопределенным. В таких случаях поле отвечает за разрешение результата. Как правило, оно выбирает предыдущую допустимую дату, которая в этом примере будет последним допустимым днем февраля.
- Определяется в:
-
plusв интерфейсеTemporal - Параметры:
-
amountToAdd- количество указанной единицы для добавления, может быть отрицательным -
unit- единица количества для добавления, не null - Возвращает:
- объект того же типа с добавленным указанным периодом, не null
- Исключения:
-
DateTimeException- если единица не может быть добавлена -
ArithmeticException- если происходит переполнение числовых значений
минус
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- если происходит переполнение числовых значений
минус
default ChronoLocalDate minus(long amountToSubtract, TemporalUnit unit)
Этот метод возвращает новый объект, основанный на этом объекте, с вычтенным указанным периодом. Например, для LocalDate, это можно использовать для вычитания количества лет, месяцев или дней. Возвращаемый объект будет иметь тот же наблюдаемый тип, что и этот объект.
В некоторых случаях изменение поля не полностью определено. Например, если целевой объект — дата, представляющая 31 марта, то вычитание одного месяца будет неопределенным. В таких случаях поле отвечает за разрешение результата. Как правило, оно выбирает предыдущую допустимую дату, которая в этом примере будет последним допустимым днем февраля.
- Определяется в:
-
minusв интерфейсеTemporal - Параметры:
-
amountToSubtract- количество указанной единицы для вычитания, может быть отрицательным -
unit- единица количества для вычитания, не null - Возвращает:
- объект того же типа с вычтенным указанным периодом, не null
- Исключения:
-
DateTimeException- если единица не может быть вычтена -
UnsupportedTemporalTypeException- если единица не поддерживается -
ArithmeticException- если происходит переполнение числовых значений
запрос
default <R> R query(TemporalQuery<R> query)
Это запрашивает эту дату с использованием указанного объекта стратегии запроса. Объект TemporalQuery определяет логику, используемую для получения результата. Прочитайте документацию запроса, чтобы понять, каким будет результат этого метода.
Результат этого метода получается путем вызова метода TemporalQuery.queryFrom(TemporalAccessor) на указанном запросе, передавая this в качестве аргумента.
- Определяется в:
-
queryв интерфейсеTemporalAccessor - Параметры типа:
R- тип результата- Параметры:
-
query- запрос для вызова, не null - Возвращает:
- результат запроса, может быть null (определяется запросом)
- Исключения:
-
DateTimeException- если запрос невозможен (определяется запросом) -
ArithmeticException- если происходит переполнение числовых значений (определяется запросом)
корректироватьВ
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- если происходит переполнение числовых значений
до
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 и указанная дата. Результат будет отрицательным, если конец предшествует началу. Отрицательный знак будет одинаковым в каждом из года, месяца и дня.
Вычисление выполняется с использованием хронологии этой даты. При необходимости входная дата будет преобразована для соответствия.
Этот экземпляр неизменяемый и не затрагивается этим вызовом метода.
- Parameters:
-
endDateExclusive- конечная дата, исключающая, которая может быть в любой хронологии, не null - Returns:
- период между этой датой и конечной датой, не null
- Throws:
-
DateTimeException- если период не может быть вычислен -
ArithmeticException- если происходит переполнение числовых значений
format
default String format(DateTimeFormatter formatter)
Эта дата будет передана форматеру для получения строки.
Реализация по умолчанию должна работать следующим образом:
return formatter.format(this);
- Parameters:
-
formatter- используемый форматер, не null - Returns:
- строка отформатированной даты, не null
- Throws:
-
DateTimeException- если при печати произошла ошибка
atTime
default ChronoLocalDateTime<?> atTime(LocalTime localTime)
ChronoLocalDateTime. Возвращает ChronoLocalDateTime, образованную из этой даты в указанное время. Все возможные комбинации даты и времени допустимы.
- Parameters:
-
localTime- используемое локальное время, не null - Returns:
- локальное дата-время, образованное из этой даты и указанного времени, не null
toEpochDay
default long toEpochDay()
Epoch Day count — это просто инкрементный счётчик дней, где день 0 — 1970-01-01 (ISO). Это определение одинаково для всех хронологий, что позволяет производить преобразование.
Эта реализация по умолчанию запрашивает поле EPOCH_DAY.
- Returns:
- эпохальный день, эквивалентный этой дате
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 в качестве компаратора.
Эта реализация по умолчанию выполняет сравнение, определённое выше.
- Specified by:
-
compareToв интерфейсеComparable<ChronoLocalDate> - Parameters:
-
other- другая дата для сравнения, не null - Returns:
- значение компаратора, т.е. сравнение этой локальной даты с
otherлокальной датой и этой хронологии сotherхронологией, в порядке, возвращая первое ненулевое значение, а в противном случае возвращая ноль - See Also:
isAfter
default boolean isAfter(ChronoLocalDate other)
Этот метод отличается от сравнения в compareTo(java.time.chrono.ChronoLocalDate) тем, что сравнивает только базовую дату, а не хронологию. Это позволяет сравнивать даты в разных календарных системах на основе их позиции на временной шкале. Это эквивалентно использованию date1.toEpochDay() > date2.toEpochDay().
Эта реализация по умолчанию выполняет сравнение на основе эпохального дня.
- Parameters:
-
other- другая дата для сравнения, не null - Returns:
- true, если эта дата находится после указанной даты
isBefore
default boolean isBefore(ChronoLocalDate other)
Этот метод отличается от сравнения в compareTo(java.time.chrono.ChronoLocalDate) тем, что сравнивает только базовую дату, а не хронологию. Это позволяет сравнивать даты в разных календарных системах на основе их позиции на временной шкале. Это эквивалентно использованию date1.toEpochDay() < date2.toEpochDay().
Эта реализация по умолчанию выполняет сравнение на основе эпохального дня.
- Parameters:
-
other- другая дата для сравнения, не null - Returns:
- true, если эта дата предшествует указанной дате
isEqual
default boolean isEqual(ChronoLocalDate other)
Этот метод отличается от сравнения в compareTo(java.time.chrono.ChronoLocalDate) тем, что сравнивает только базовую дату, а не хронологию. Это позволяет сравнивать даты в разных календарных системах на основе их позиции на временной шкале. Это эквивалентно использованию date1.toEpochDay() == date2.toEpochDay().
Эта реализация по умолчанию выполняет сравнение на основе эпохального дня.
- Parameters:
-
other- другая дата для сравнения, не null - Returns:
- true, если базовая дата равна указанной дате
equals
boolean equals(Object obj)
Сравнивает эту дату с другой, гарантируя, что дата и хронология совпадают.
Чтобы сравнить даты двух TemporalAccessor объектов, включая даты в двух разных хронологиях, используйте ChronoField.EPOCH_DAY в качестве компаратора.
hashCode
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/chrono/ChronoLocalDate.html