Spec-Zone.ru › OpenJDK 24

Класс Период

java.lang.Object
java.time.Period
Все реализуемые интерфейсы:
Serializable, ChronoPeriod, TemporalAmount
public final class Period extends Object implements ChronoPeriod, Serializable
Период времени, основанный на дате, в системе календаря ISO-8601, например, '2 года, 3 месяца и 4 дня'.

Этот класс моделирует количество или временной интервал в терминах лет, месяцев и дней. См. Duration для эквивалента этого класса, основанного на времени.

Продолжительности и периоды различаются в отношении учета летнего времени при добавлении к ZonedDateTime. Duration добавит точное количество секунд, таким образом, продолжительность одного дня всегда составляет ровно 24 часа. В противоположность этому, Period добавит концептуальный день, пытаясь сохранить местное время.

Например, рассмотрим добавление периода в один день и продолжительности в один день к 18:00 накануне перехода на летнее время. Period добавит концептуальный день и приведет к ZonedDateTime в 18:00 следующего дня. В противоположность этому, Duration добавит ровно 24 часа, что приведет к ZonedDateTime в 19:00 следующего дня (при условии разницы в часе из-за перехода на летнее время).

Поддерживаемые единицы периода — YEARS, MONTHS и DAYS. Все три поля всегда присутствуют, но могут быть установлены в ноль.

Система календаря ISO-8601 — это современная гражданская система календаря, используемая сегодня в большинстве стран мира. Она эквивалентна пролептической григорианской системе календаря, в которой современные правила для високосных лет применяются для всех времен.

Период моделируется как направленное количество времени, что означает, что отдельные части периода могут быть отрицательными.

Это бессвязный класс; программисты должны рассматривать экземпляры, которые равны, как взаимозаменяемые и не должны использовать экземпляры для синхронизации, иначе может произойти непредсказуемое поведение. Например, в будущих версиях синхронизация может завершиться неудачей. Для сравнений следует использовать метод equals.

Требования к реализации:
Этот класс неизменяем и потокобезопасен.
С:
1.8
См. также:
  • Сериализованная форма

Краткое описание полей

Модификатор и тип Поле Описание
static final Period ZERO
Константа для периода нулевой длины.

Краткое описание методов

Модификатор и тип Метод Описание
Temporal addTo(Temporal temporal)
Добавляет этот период к указанному временному объекту.
static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive)
Получает Period, содержащий количество лет, месяцев и дней между двумя датами.
boolean equals(Object obj)
Проверяет, равен ли этот период другому периоду.
static Period from(TemporalAmount amount)
Получает экземпляр Period из временного значения.
long get(TemporalUnit unit)
Получает значение запрошенной единицы.
IsoChronology getChronology()
Получает хронологию этого периода, которая соответствует системе календаря ISO.
int getDays()
Получает количество дней в этом периоде.
int getMonths()
Получает количество месяцев в этом периоде.
List<TemporalUnit> getUnits()
Получает набор единиц, поддерживаемых этим периодом.
int getYears()
Получает количество лет в этом периоде.
int hashCode()
Хеш-код для этого периода.
boolean isNegative()
Проверяет, отрицательно ли какое-либо из трех значений единиц этого периода.
boolean isZero()
Проверяет, равны ли все три значения единиц этого периода нулю.
Period minus(TemporalAmount amountToSubtract)
Возвращает копию этого периода с вычтенным указанным периодом.
Period minusDays(long daysToSubtract)
Возвращает копию этого периода с вычтенными указанными днями.
Period minusMonths(long monthsToSubtract)
Возвращает копию этого периода с вычтенными указанными месяцами.
Period minusYears(long yearsToSubtract)
Возвращает копию этого периода с вычтенными указанными годами.
Period multipliedBy(int scalar)
Возвращает новый экземпляр с каждым элементом в этом периоде, умноженным на указанный скаляр.
Period negated()
Возвращает новый экземпляр с отрицанием каждого значения в этом периоде.
Period normalized()
Возвращает копию этого периода с нормализованными значениями лет и месяцев.
static Period of(int years, int months, int days)
Получает Period, представляющий количество лет, месяцев и дней.
static Period ofDays(int days)
Получает Period, представляющий количество дней.
static Period ofMonths(int months)
Получает Period, представляющий количество месяцев.
static Period ofWeeks(int weeks)
Получает Period, представляющий количество недель.
static Period ofYears(int years)
Получает Period, представляющий количество лет.
static Period parse(CharSequence text)
Получает Period из строкового представления, например, PnYnMnD.
Period plus(TemporalAmount amountToAdd)
Возвращает копию этого периода с добавленным указанным периодом.
Period plusDays(long daysToAdd)
Возвращает копию этого периода с добавленными указанными днями.
Period plusMonths(long monthsToAdd)
Возвращает копию этого периода с добавленными указанными месяцами.
Period plusYears(long yearsToAdd)
Возвращает копию этого периода с добавленными указанными годами.
Temporal subtractFrom(Temporal temporal)
Вычитает этот период из указанного временного объекта.
String toString()
Выводит этот период как String, например, P6Y3M1D.
long toTotalMonths()
Получает общее количество месяцев в этом периоде.
Period withDays(int days)
Возвращает копию этого периода с указанным количеством дней.
Period withMonths(int months)
Возвращает копию этого периода с указанным количеством месяцев.
Period withYears(int years)
Возвращает копию этого периода с указанным количеством лет.

Методы, объявленные в классе java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Подробное описание полей

ZERO

public static final Period ZERO
Константа для периода нулевой длительности.

Подробное описание методов

ofYears

public static Period ofYears(int years)
Получает Period, представляющую количество лет.

Результирующий период будет содержать указанное количество лет. Единицы месяцев и дней будут равны нулю.

Параметры:
years - количество лет, положительное или отрицательное
Возвращает:
период из лет, не null

ofMonths

public static Period ofMonths(int months)
Получает Period, представляющую количество месяцев.

Результирующий период будет содержать указанное количество месяцев. Единицы лет и дней будут равны нулю.

Параметры:
months - количество месяцев, положительное или отрицательное
Возвращает:
период из месяцев, не null

ofWeeks

public static Period ofWeeks(int weeks)
Получает Period, представляющую количество недель.

Результирующий период будет основан на днях, при этом количество дней будет равно количеству недель, умноженному на 7. Единицы лет и месяцев будут равны нулю.

Параметры:
weeks - количество недель, положительное или отрицательное
Возвращает:
период, с входными неделями, преобразованными в дни, не null

ofDays

public static Period ofDays(int days)
Получает Period, представляющую количество дней.

Результирующий период будет содержать указанное количество дней. Единицы лет и месяцев будут равны нулю.

Параметры:
days - количество дней, положительное или отрицательное
Возвращает:
период из дней, не null

of

public static Period of(int years, int months, int days)
Получает Period, представляющий количество лет, месяцев и дней.

Создает экземпляр на основе лет, месяцев и дней.

Параметры:
years - количество лет, может быть отрицательным
months - количество месяцев, может быть отрицательным
days - количество дней, может быть отрицательным
Возвращает:
период из лет, месяцев и дней, не null

from

public static Period from(TemporalAmount amount)
Получает экземпляр Period из временного количества.

Получает период на основе указанного количества. TemporalAmount представляет собой временное количество, которое может быть основано на дате или времени, которое этот фабричный метод извлекает в Period.

Преобразование проходит по набору единиц из количества и использует YEARS, MONTHS и DAYS единицы для создания периода. Если обнаружены другие единицы, выбрасывается исключение.

Если количество является ChronoPeriod, то оно должно использовать хронологию ISO.

Параметры:
amount - временное количество для преобразования, не null
Возвращает:
эквивалентный период, не null
Исключения:
DateTimeException - если невозможно преобразовать в Period
ArithmeticException - если количество лет, месяцев или дней превышает int

parse

public static Period parse(CharSequence text)
Получает Period из текстовой строки, такой как PnYnMnD.

Этот метод анализирует строку, созданную toString(), которая основана на форматах периодов ISO-8601 PnYnMnD и PnW.

Строка начинается с необязательного знака, обозначенного ASCII символом отрицания или положительности. Если отрицательный, весь период инвертируется. Следующая ASCII буква "P" в верхнем или нижнем регистре. Затем следуют четыре раздела, каждый из которых состоит из числа и суффикса. Хотя бы один из четырех разделов должен быть присутствующим. Разделы имеют суффиксы ASCII "Y", "M", "W" и "D" для лет, месяцев, недель и дней, которые принимаются в верхнем или нижнем регистре. Суффиксы должны следовать в порядке. Часть числа каждого раздела должна состоять из ASCII цифр. Число может быть снабжено префиксом ASCII символом отрицания или положительности. Число должно быть преобразовано в int.

Ведущий знак плюс/минус и отрицательные значения для других единиц не являются частью стандарта ISO-8601. Кроме того, ISO-8601 не допускает смешения между форматами PnYnMnD и PnW. Любой ввод, основанный на неделях, умножается на 7 и обрабатывается как количество дней.

Например, следующие являются допустимыми вводами:

   "P2Y"             -- Period.ofYears(2)
   "P3M"             -- Period.ofMonths(3)
   "P4W"             -- Period.ofWeeks(4)
   "P5D"             -- Period.ofDays(5)
   "P1Y2M3D"         -- Period.of(1, 2, 3)
   "P1Y2M3W4D"       -- Period.of(1, 2, 25)
   "P-1Y2M"          -- Period.of(-1, 2, 0)
   "-P1Y2M"          -- Period.of(-1, -2, 0)
 
Параметры:
text - текст для анализа, не null
Возвращает:
анализ периода, не null
Исключения:
DateTimeParseException - если текст не может быть преобразован в период

between

public static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive)
Получает Period, состоящий из количества лет, месяцев и дней между двумя датами.

Начальная дата включена, а конечная - нет. Период вычисляется путем удаления полных месяцев, затем вычисления оставшегося количества дней, корректируя, чтобы гарантировать, что оба имеют одинаковый знак. Количество месяцев затем разделяется на годы и месяцы, основываясь на 12-месячном году. Месяц считается, если конечный день месяца больше или равен начальному дню месяца. Например, от 2010-01-15 до 2011-03-18 составляет один год, два месяца и три дня.

Результат этого метода может быть отрицательным периодом, если конец предшествует началу. Отрицательный знак будет одинаковым для каждого из года, месяца и дня.

Параметры:
startDateInclusive - начальная дата, включительно, не null
endDateExclusive - конечная дата, исключая, не null
Возвращает:
период между этой датой и конечной датой, не null
См. также:
  • ChronoLocalDate.until(ChronoLocalDate)

get

public long get(TemporalUnit unit)
Получает значение запрошенной единицы.

Этот метод возвращает значение для каждой из трех поддерживаемых единиц, YEARS, MONTHS и DAYS. Все другие единицы вызывают исключение.

Определяется в:
get в интерфейсе ChronoPeriod
Определяется в:
get в интерфейсе TemporalAmount
Параметры:
unit - TemporalUnit, для которого нужно вернуть значение
Возвращает:
значение типа long единицы
Исключения:
DateTimeException - если единица не поддерживается
UnsupportedTemporalTypeException - если единица не поддерживается

getUnits

public List<TemporalUnit> getUnits()
Получает набор единиц, поддерживаемых этим периодом.

Поддерживаемые единицы: YEARS, MONTHS и DAYS. Они возвращаются в порядке годы, месяцы, дни.

Этот набор может быть использован вместе с get(TemporalUnit) для доступа ко всему состоянию периода.

Определяется в:
getUnits в интерфейсе ChronoPeriod
Определяется в:
getUnits в интерфейсе TemporalAmount
Возвращает:
список, содержащий единицы лет, месяцев и дней, не null

getChronology

public IsoChronology getChronology()
Получает хронологию этого периода, которая является системой ISO календаря.

Chronology представляет собой систему календаря, используемую. Система календаря ISO-8601 — это современная гражданская система календаря, используемая сегодня в большей части мира. Она эквивалентна пролептическому григорианскому календарю, в котором сегодняшние правила для високосных годов применяются для всех времен.

Определяется в:
getChronology в интерфейсе ChronoPeriod
Возвращает:
хронологию ISO, не null

isZero

public boolean isZero()
Проверяет, равны ли все три единицы этого периода нулю.

Нулевой период имеет значение ноль для единиц лет, месяцев и дней.

Определяется в:
isZero в интерфейсе ChronoPeriod
Возвращает:
true, если этот период имеет нулевую длину

isNegative

public boolean isNegative()
Проверяет, являются ли какие-либо из трех единиц этого периода отрицательными.

Проверяет, меньше ли единицы лет, месяцев или дней нуля.

Определяется в:
isNegative в интерфейсе ChronoPeriod
Возвращает:
true, если любая единица этого периода отрицательна

getYears

public int getYears()
Получает количество лет этого периода.

Это возвращает единицу лет.

Единица месяцев не нормализуется автоматически с единицей лет. Это означает, что период "15 месяцев" отличается от периода "1 год и 3 месяца".

Returns:
количество лет этого периода, может быть отрицательным

getMonths

public int getMonths()
Получает количество месяцев этого периода.

Это возвращает единицу месяцев.

Единица месяцев не нормализуется автоматически с единицей лет. Это означает, что период "15 месяцев" отличается от периода "1 год и 3 месяца".

Returns:
количество месяцев этого периода, может быть отрицательным

getDays

public int getDays()
Получает количество дней этого периода.

Это возвращает единицу дней.

Returns:
количество дней этого периода, может быть отрицательным

withYears

public Period withYears(int years)
Возвращает копию этого периода с указанным количеством лет.

Это устанавливает количество единиц лет в копии этого периода. Единицы месяцев и дней не изменяются.

Единица месяцев не нормализуется автоматически с единицей лет. Это означает, что период "15 месяцев" отличается от периода "1 год и 3 месяца".

Этот экземпляр является неизменяемым и не затрагивается этим вызовом метода.

Parameters:
years - количество лет для представления, может быть отрицательным
Returns:
a Period на основе этого периода с запрошенными годами, не null

withMonths

public Period withMonths(int months)
Возвращает копию этого периода с указанным количеством месяцев.

Это устанавливает количество единиц месяцев в копии этого периода. Единицы лет и дней не изменяются.

Единица месяцев не нормализуется автоматически с единицей лет. Это означает, что период "15 месяцев" отличается от периода "1 год и 3 месяца".

Этот экземпляр является неизменяемым и не затрагивается этим вызовом метода.

Parameters:
months - количество месяцев для представления, может быть отрицательным
Returns:
a Period на основе этого периода с запрошенными месяцами, не null

withDays

public Period withDays(int days)
Возвращает копию этого периода с указанным количеством дней.

Это устанавливает количество единиц дней в копии этого периода. Единицы лет и месяцев не изменяются.

Этот экземпляр является неизменяемым и не затрагивается этим вызовом метода.

Parameters:
days - количество дней для представления, может быть отрицательным
Returns:
a Period на основе этого периода с запрошенными днями, не null

plus

public Period plus(TemporalAmount amountToAdd)
Возвращает копию этого периода с добавленным указанным периодом.

Это работает отдельно для лет, месяцев и дней. Нормализация не выполняется.

Например, "1 год, 6 месяцев и 3 дня" плюс "2 года, 2 месяца и 2 дня" возвращает "3 года, 8 месяцев и 5 дней".

Указанное количество обычно является экземпляром Period. Другие типы интерпретируются с использованием from(TemporalAmount).

Этот экземпляр является неизменяемым и не затрагивается этим вызовом метода.

Specified by:
plus in interface ChronoPeriod
Parameters:
amountToAdd - количество для добавления, не null
Returns:
a Period на основе этого периода с добавленным запрошенным периодом, не null
Throws:
DateTimeException - если указанное количество имеет не-ISO хронологию или содержит недопустимую единицу
ArithmeticException - если происходит числовое переполнение

plusYears

public Period plusYears(long yearsToAdd)
Возвращает копию этого периода с добавленными указанными годами.

Это добавляет количество к единице лет в копии этого периода. Единицы месяцев и дней не изменяются. Например, "1 год, 6 месяцев и 3 дня" плюс 2 года возвращает "3 года, 6 месяцев и 3 дня".

Этот экземпляр является неизменяемым и не затрагивается этим вызовом метода.

Parameters:
yearsToAdd - количество лет для добавления, положительное или отрицательное
Returns:
a Period на основе этого периода с добавленными указанными годами, не null
Throws:
ArithmeticException - если происходит числовое переполнение

plusMonths

public Period plusMonths(long monthsToAdd)
Возвращает копию этого периода с добавленными указанными месяцами.

Это добавляет количество к единице месяцев в копии этого периода. Единицы лет и дней не изменяются. Например, "1 год, 6 месяцев и 3 дня" плюс 2 месяца возвращает "1 год, 8 месяцев и 3 дня".

Этот экземпляр является неизменяемым и не затрагивается этим вызовом метода.

Parameters:
monthsToAdd - количество месяцев для добавления, положительное или отрицательное
Returns:
a Period на основе этого периода с добавленными указанными месяцами, не null
Throws:
ArithmeticException - если происходит числовое переполнение

plusDays

public Period plusDays(long daysToAdd)
Возвращает копию этого периода с добавленными указанными днями.

Это добавляет количество к единице дней в копии этого периода. Единицы лет и месяцев не изменяются. Например, "1 год, 6 месяцев и 3 дня" плюс 2 дня возвращает "1 год, 6 месяцев и 5 дней".

Этот экземпляр является неизменяемым и не затрагивается этим вызовом метода.

Parameters:
daysToAdd - количество дней для добавления, положительное или отрицательное
Returns:
a Period на основе этого периода с добавленными указанными днями, не null
Throws:
ArithmeticException - если происходит числовое переполнение

minus

public Period minus(TemporalAmount amountToSubtract)
Возвращает копию этого периода с вычтенным указанным периодом.

Это работает отдельно для лет, месяцев и дней. Нормализация не выполняется.

Например, "1 год, 6 месяцев и 3 дня" минус "2 года, 2 месяца и 2 дня" возвращает "-1 год, 4 месяца и 1 день".

Указанное количество обычно является экземпляром Period. Другие типы интерпретируются с использованием from(TemporalAmount).

Этот экземпляр является неизменяемым и не затрагивается этим вызовом метода.

Specified by:
minus in interface ChronoPeriod
Parameters:
amountToSubtract - количество для вычитания, не null
Returns:
a Period на основе этого периода с вычтенным запрошенным периодом, не null
Throws:
DateTimeException - если указанное количество имеет не-ISO хронологию или содержит недопустимую единицу
ArithmeticException - если происходит числовое переполнение

minusYears

public Period minusYears(long yearsToSubtract)
Возвращает копию этого периода с вычтенными указанными годами.

Это вычитает количество из единицы лет в копии этого периода. Единицы месяцев и дней не изменяются. Например, "1 год, 6 месяцев и 3 дня" минус 2 года возвращает "-1 год, 6 месяцев и 3 дня".

Этот экземпляр является неизменяемым и не затрагивается этим вызовом метода.

Parameters:
yearsToSubtract - количество лет для вычитания, положительное или отрицательное
Returns:
a Period на основе этого периода с вычтенными указанными годами, не null
Throws:
ArithmeticException - если происходит числовое переполнение

minusMonths

public Period minusMonths(long monthsToSubtract)
Возвращает копию этого периода с вычтенными указанными месяцами.

Это вычитает количество из единицы месяцев в копии этого периода. Единицы лет и дней не изменяются. Например, "1 год, 6 месяцев и 3 дня" минус 2 месяца возвращает "1 год, 4 месяца и 3 дня".

Этот экземпляр является неизменяемым и не затрагивается этим вызовом метода.

Parameters:
monthsToSubtract - количество лет для вычитания, положительное или отрицательное
Returns:
a Period на основе этого периода с вычтенными указанными месяцами, не null
Throws:
ArithmeticException - если происходит числовое переполнение

minusDays

public Period minusDays(long daysToSubtract)
Возвращает копию этого периода с вычтенными указанными днями.

Это вычитает количество из единицы дней в копии этого периода. Единицы лет и месяцев не изменяются. Например, "1 год, 6 месяцев и 3 дня" минус 2 дня возвращает "1 год, 6 месяцев и 1 день".

Этот экземпляр является неизменяемым и не затрагивается этим вызовом метода.

Parameters:
daysToSubtract - количество месяцев для вычитания, положительное или отрицательное
Returns:
a Period на основе этого периода с вычтенными указанными днями, не null
Throws:
ArithmeticException - если происходит числовое переполнение

multipliedBy

public Period multipliedBy(int scalar)
Возвращает новый экземпляр, в котором каждый элемент этого периода умножен на указанный скаляр.

Это возвращает период, в котором каждый из единиц лет, месяцев и дней индивидуально умножается. Например, период "2 года, -3 месяца и 4 дня", умноженный на 3, вернёт "6 лет, -9 месяцев и 12 дней". Нормализация не выполняется.

Specified by:
multipliedBy in interface ChronoPeriod
Parameters:
scalar - скаляр, на который нужно умножить, не null
Returns:
a Period, основанный на этом периоде с величинами, умноженными на скаляр, не null
Throws:
ArithmeticException - если происходит переполнение числовых значений

negated

public Period negated()
Возвращает новый экземпляр, в котором каждый показатель в этом периоде изменён на противоположный.

Это возвращает период, в котором каждый из единиц лет, месяцев и дней индивидуально изменён на противоположный. Например, период "2 года, -3 месяца и 4 дня" будет изменён на противоположный "-2 года, 3 месяца и -4 дня". Нормализация не выполняется.

Specified by:
negated in interface ChronoPeriod
Returns:
a Period, основанный на этом периоде с изменёнными на противоположный показателями, не null
Throws:
ArithmeticException - если происходит переполнение числовых значений, что происходит только в том случае, если у одного из единиц есть значение Integer.MIN_VALUE

normalized

public Period normalized()
Возвращает копию этого периода с нормализованными годами и месяцами.

Это нормализует единицы лет и месяцев, оставив единицу дней неизменной. Единица месяцев корректируется, чтобы иметь абсолютное значение меньше 12, при этом единица лет корректируется соответственно. Например, период "1 год и 15 месяцев" будет нормализован до "2 года и 3 месяца".

Знак единиц лет и месяцев будет таким же после нормализации. Например, период "1 год и -25 месяцев" будет нормализован до "-1 год и -1 месяц".

Этот экземпляр неизменяемый и не изменяется этим вызовом метода.

Specified by:
normalized in interface ChronoPeriod
Returns:
a Period, основанный на этом периоде с избыточными месяцами, нормализованными в годы, не null
Throws:
ArithmeticException - если происходит переполнение числовых значений

toTotalMonths

public long toTotalMonths()
Возвращает общее количество месяцев в этом периоде.

Это возвращает общее количество месяцев в периоде, умножив количество лет на 12 и добавив количество месяцев.

Этот экземпляр неизменяемый и не изменяется этим вызовом метода.

Returns:
общее количество месяцев в периоде, может быть отрицательным

addTo

public Temporal addTo(Temporal temporal)
Добавляет этот период к указанному объекту временной шкалы.

Это возвращает объект временной шкалы того же наблюдаемого типа, что и вход, с добавленным к нему этим периодом. Если у временной шкалы есть хронология, она должна быть хронологией ISO.

В большинстве случаев яснее использовать обратный порядок вызова, используя Temporal.plus(TemporalAmount).

   // these two lines are equivalent, but the second approach is recommended
   dateTime = thisPeriod.addTo(dateTime);
   dateTime = dateTime.plus(thisPeriod);
 

Вычисление выполняется следующим образом. Во-первых, проверяется хронология временной шкалы, чтобы убедиться, что она является хронологией ISO или null. Во-вторых, если месяцы равны нулю, добавляются годы, если они не равны нулю, в противном случае добавляется комбинация лет и месяцев, если она не равна нулю. Наконец, добавляются любые дни.

Этот подход гарантирует, что частичный период может быть добавлен к частичной дате. Например, период лет и/или месяцев может быть добавлен к YearMonth, но период, включающий дни, не может. Подход также добавляет годы и месяцы вместе при необходимости, что гарантирует правильное поведение в конце месяца.

Этот экземпляр неизменяемый и не изменяется этим вызовом метода.

Specified by:
addTo in interface ChronoPeriod
Specified by:
addTo in interface TemporalAmount
Parameters:
temporal - объект временной шкалы для корректировки, не null
Returns:
объект того же типа с произведённой корректировкой, не null
Throws:
DateTimeException - если добавление невозможно
ArithmeticException - если происходит переполнение числовых значений

subtractFrom

public Temporal subtractFrom(Temporal temporal)
Вычитает этот период из указанного объекта временной шкалы.

Это возвращает объект временной шкалы того же наблюдаемого типа, что и вход, с вычтенным из него этим периодом. Если у временной шкалы есть хронология, она должна быть хронологией ISO.

В большинстве случаев яснее использовать обратный порядок вызова, используя Temporal.minus(TemporalAmount).

   // these two lines are equivalent, but the second approach is recommended
   dateTime = thisPeriod.subtractFrom(dateTime);
   dateTime = dateTime.minus(thisPeriod);
 

Вычисление выполняется следующим образом. Во-первых, проверяется хронология временной шкалы, чтобы убедиться, что она является хронологией ISO или null. Во-вторых, если месяцы равны нулю, вычитаются годы, если они не равны нулю, в противном случае вычитается комбинация лет и месяцев, если она не равна нулю. Наконец, вычитаются любые дни.

Этот подход гарантирует, что частичный период может быть вычтен из частичной даты. Например, период лет и/или месяцев может быть вычтен из YearMonth, но период, включающий дни, не может. Подход также вычитает годы и месяцы вместе при необходимости, что гарантирует правильное поведение в конце месяца.

Этот экземпляр неизменяемый и не изменяется этим вызовом метода.

Specified by:
subtractFrom in interface ChronoPeriod
Specified by:
subtractFrom in interface TemporalAmount
Parameters:
temporal - объект временной шкалы для корректировки, не null
Returns:
объект того же типа с произведённой корректировкой, не null
Throws:
DateTimeException - если вычитание невозможно
ArithmeticException - если происходит переполнение числовых значений

equals

public boolean equals(Object obj)
Проверяет, равен ли этот период другому периоду.

Сравнение основано на типе Period и каждой из трёх величин. Для равенства единицы лет, месяцев и дней должны быть индивидуально равны. Обратите внимание, что это означает, что период "15 месяцев" не равен периоду "1 год и 3 месяца".

Specified by:
equals in interface ChronoPeriod
Overrides:
equals in class Object
Parameters:
obj - объект для проверки, null возвращает false
Returns:
true, если этот период равен другому периоду
See Also:
  • Object.hashCode()
  • HashMap

hashCode

public int hashCode()
Хеш-код для этого периода.
Specified by:
hashCode in interface ChronoPeriod
Overrides:
hashCode in class Object
Returns:
подходящий хеш-код
See Also:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(java.lang.Object)

toString

public String toString()
Выводит этот период как String, например, P6Y3M1D.

Вывод будет в формате периода ISO-8601. Нулевой период будет представлен как ноль дней, 'P0D'.

Specified by:
toString in interface ChronoPeriod
Overrides:
toString in class Object
Returns:
строковое представление этого периода, не null

© 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/Period.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API