Интерфейс 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, если требуется доступ для чтения и записи.- Требования к реализации:
- Этот интерфейс должен быть реализован с осторожностью, чтобы обеспечить корректную работу других классов. Все реализации, которые могут быть созданы, должны быть final, неизменяемыми и потокобезопасными. Подклассы должны быть Serializable, если это возможно.
В систему могут быть добавлены дополнительные системы календарей. Подробнее см.
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<ChronoLocalDate> |
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- если происходит переполнение числовых значений
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 не гарантирует возвращения той же даты и времени.
- Specified by:
-
plusв интерфейсеTemporal - Parameters:
-
amount- величина для добавления, не null - Returns:
- объект того же типа с выполненной корректировкой, не null
- Throws:
-
DateTimeException- если добавление невозможно -
ArithmeticException- если происходит переполнение числовых значений
plus
default ChronoLocalDate plus(long amountToAdd, TemporalUnit unit)
Этот метод возвращает новый объект, основанный на этом объекте, с добавленным указанным периодом. Например, для LocalDate, это можно использовать для добавления количества лет, месяцев или дней. Возвращаемый объект будет иметь тот же наблюдаемый тип, что и этот объект.
В некоторых случаях изменение поля не полностью определено. Например, если целевой объект представляет дату 31 января, то добавление одного месяца будет неясно. В таких случаях поле отвечает за разрешение результата. Обычно оно выберет предыдущую допустимую дату, которая в этом примере будет последним допустимым днем февраля.
- Specified by:
-
plusв интерфейсеTemporal - Parameters:
-
amountToAdd- количество указанного значения для добавления, может быть отрицательным -
unit- единица измерения величины для добавления, не null - Returns:
- объект того же типа с добавленным указанным периодом, не null
- Throws:
-
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 не гарантирует возвращения той же даты и времени.
- Specified by:
-
minusв интерфейсеTemporal - Parameters:
-
amount- величина для вычитания, не null - Returns:
- объект того же типа с выполненной корректировкой, не null
- Throws:
-
DateTimeException- если вычитание невозможно -
ArithmeticException- если происходит переполнение числовых значений
minus
default ChronoLocalDate minus(long amountToSubtract, TemporalUnit unit)
Этот метод возвращает новый объект, основанный на этом объекте, с вычтенным указанным периодом. Например, для LocalDate, это можно использовать для вычитания количества лет, месяцев или дней. Возвращаемый объект будет иметь тот же наблюдаемый тип, что и этот объект.
В некоторых случаях изменение поля не полностью определено. Например, если целевой объект представляет дату 31 марта, то вычитание одного месяца будет неясно. В таких случаях поле отвечает за разрешение результата. Обычно оно выберет предыдущую допустимую дату, которая в этом примере будет последним допустимым днем февраля.
- Specified by:
-
minusв интерфейсеTemporal - Parameters:
-
amountToSubtract- количество указанного значения для вычитания, может быть отрицательным -
unit- единица измерения величины для вычитания, не null - Returns:
- объект того же типа с вычтенным указанным периодом, не null
- Throws:
-
DateTimeException- если единицу невозможно вычесть -
UnsupportedTemporalTypeException- если единица не поддерживается -
ArithmeticException- если происходит переполнение числовых значений
query
default <R> R query(TemporalQuery<R> query)
Это запрашивает эту дату с помощью указанного объекта стратегии запроса. Объект TemporalQuery определяет логику, которая должна быть использована для получения результата. Прочитайте документацию запроса, чтобы понять, каким будет результат этого метода.
Результат этого метода получается путем вызова метода TemporalQuery.queryFrom(TemporalAccessor) на указанном запросе, передав this в качестве аргумента.
- Specified by:
-
queryв интерфейсеTemporalAccessor - Type Parameters:
-
R- тип результата - Parameters:
-
query- запрос для вызова, не null - Returns:
- результат запроса, может быть null (определяется запросом)
- Throws:
-
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);
Этот экземпляр неизменяемый и не затрагивается этим вызовом метода.
- Specified by:
-
adjustIntoв интерфейсеTemporalAdjuster - Parameters:
-
temporal- целевой объект для корректировки, не null - Returns:
- откорректированный объект, не null
- Throws:
-
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 в качестве первого аргумента и преобразованного входного временного интервала в качестве второго аргумента.
Этот экземпляр неизменяемый и не затрагивается этим вызовом метода.
- Specified by:
-
untilв интерфейсеTemporal - Parameters:
-
endExclusive- конечная дата, исключая ее, которая преобразуется вChronoLocalDateв той же хронологии, не null -
unit- единица измерения для измерения величины, не null - Returns:
- количество времени между этой датой и конечной датой
- Throws:
-
DateTimeException- если величину невозможно рассчитать или конечный временной интервал невозможно преобразовать вChronoLocalDate -
UnsupportedTemporalTypeException- если единица не поддерживается -
ArithmeticException- если происходит переполнение числовых значений
until
ChronoPeriod until(ChronoLocalDate endDateExclusive)
ChronoPeriod. Это вычисляет период между двумя датами. Все предоставленные хронологии вычисляют период с использованием лет, месяцев и дней, однако ChronoPeriod API позволяет представлять период с использованием других единиц.
Точки начала и окончания — 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:
- значение сравнения, отрицательное, если меньше, положительное, если больше
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 в качестве сравнителя.
- Overrides:
-
equalsв классеObject - Parameters:
-
obj- объект для проверки, null возвращает false - Returns:
- true, если эта дата равна другой
- See Also:
hashCode
int hashCode()
- Overrides:
-
hashCodeв классеObject - Returns:
- подходящий хеш-код
- See Also:
toString
String toString()
String. Вывод будет включать полную локальную дату.
- Overrides:
-
toStringв классеObject - Returns:
- отформатированная дата, не null
© 1993, 2021, 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/17/docs/api/java.base/java/time/chrono/ChronoLocalDate.html