public final class Period extends Object implements ChronoPeriod, Serializable
このクラスは、時間の量を年、月、および日単位でモデル化します。 このクラスと同等の時間ベースのクラスについては、「Duration
」を参照してください。
デュレーションと期間は、ZonedDateTime
に加算されるときのサマー・タイムの扱いが異なります。 Duration
では正確な秒数を加算するため、1日のデュレーションは常に24時間ちょうどになります。 これに対し、Period
では概念的な日を加算して、ローカル時間を保持しようとします。
たとえば、サマー・タイムのギャップが生じる前に、1日の期間と1日のデュレーションを夕方の18:00に加算することを考えてみます。 Period
は概念的な日を加算するため、結果となるZonedDateTime
は翌日18:00になります。 これに対し、Duration
は正確に24時間を加算するため、結果となるZonedDateTime
は翌日19:00となります(1時間のDSTギャップがあるものとする)。
サポートされている期間の単位は、YEARS
、MONTHS
、およびDAYS
です。 3つのフィールドはすべて常に存在しますが、ゼロに設定することもできます。
ISO-8601暦体系は、世界中の大部分で現在使われている近代の常用暦体系です。 これは、現在のうるう年のルールがすべての時間に適用される、先発グレゴリオ暦体系と同等です。
期間は、方向性のある時間の量としてモデル化されます。つまり、期間の個々の部分は負になることがあります。
これは値ベースのクラスです。Period
のインスタンスに対して、アイデンティティの影響を受けやすい操作(参照型等価演算子(==
)、アイデンティティ・ハッシュ・コード、同期化など)を使用すると、予測できない結果が生じることがあるため、使わないようにしてください。 比較する場合は、equals
メソッドを使用することをお薦めします。
修飾子と型 | メソッド | 説明 |
---|---|---|
Temporal |
addTo(Temporal temporal) |
指定された時間的オブジェクトにこの期間を加算します。
|
static Period |
between(LocalDate startDateInclusive, LocalDate endDateExclusive) |
2つの日付間の年数、月数、および日数で構成される
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() |
この期間の3つの単位のいずれかが負の値であるかどうかを確認します。
|
boolean |
isZero() |
この期間の3つの単位すべてがゼロであるかどうかを確認します。
|
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) |
PnYnMnD などのテキスト文字列からPeriod を取得します。 |
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) |
指定された年数を使って、この期間のコピーを返します。
|
between
public static final Period ZERO
public static Period ofYears(int years)
Period
を取得します。
結果となる期間には、指定された年数が含まれます。 月数および日数単位はゼロになります。
years
- 年数(正または負)public static Period ofMonths(int months)
Period
を取得します。
結果となる期間には、指定された月数が含まれます。 年数および日数単位はゼロになります。
months
- 月数(正または負)public static Period ofWeeks(int weeks)
Period
を取得します。
結果となる期間は日ベースとなり、その日数は週数に7を掛けた値に等しくなります。 年数および月数単位はゼロになります。
weeks
- 週数(正または負)public static Period ofDays(int days)
Period
を取得します。
結果となる期間には、指定された日数が含まれます。 年数および月数単位はゼロになります。
days
- 日数、正または負public static Period of(int years, int months, int days)
Period
を取得します。
これは、年数、月数、および日数に基づいてインスタンスを作成します。
years
- 年数。負の場合もあるmonths
- 月数。負の場合もあるdays
- 日数。負の場合もあるpublic static Period from(TemporalAmount amount)
Period
のインスタンスを取得します。
これは、指定された量に基づいて期間を取得します。 TemporalAmount
は時間量(日付ベースまたは時間ベースのどちらも可)を表し、それがこのファクトリで抽出されてPeriod
になります。
この変換では、量から単位のセットをループし、YEARS
、MONTHS
、およびDAYS
の単位を使用して期間を作成します。 他の単位が見つかった場合は、例外がスローされます。
その量がChronoPeriod
である場合は、ISO暦を使用する必要があります。
amount
- 変換する時間量、nullでないDateTimeException
- Period
に変換できない場合ArithmeticException
- 年数、月数、または日数がintを超える場合public static Period parse(CharSequence text)
PnYnMnD
などのテキスト文字列からPeriod
を取得します。
これは、ISO-8601の期間フォーマットPnYnMnD
およびPnW
に基づいている、toString()
によって生成された文字列を解析します。
文字列は、ASCIIマイナスまたはプラス記号で示されるオプション記号で始まります。 マイナスの場合は、期間全体がマイナスになります。 ASCII文字Pが大文字または小文字で続きます。 その後は4つセクションで、それぞれ数字と接尾辞で構成されます。 4つのセクションの少なくとも1つは存在している必要があります。 それらのセクションには、大文字または小文字で受け入れられる、年、月、週、および日を表す「Y」、「M」、「W」、および「D」というASCIIによる接尾辞があります。 接尾辞は順番に出現する必要があります。 各セクションの数値部分は、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以外DateTimeParseException
- そのテキストを期間に解析できない場合public static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive)
Period
を取得します。
開始日は含まれますが、終了日は含まれません。 この期間を計算するには、完全な月を削除してから、残りの日数を計算し、両方が同じ符号を持つように調整します。 次に、1年12か月に基づいて、月数が年数と月数に分けられます。 月の終了日が月の開始日に等しいか、それよりも大きい場合は、1か月とみなされます。 たとえば、2010-01-15
から2011-03-18
までは1年と2か月と3日です。
このメソッドの結果は、終了が開始より前である場合に、負の期間になることがあります。 マイナス記号は年、月、日のそれぞれで同じになります。
startDateInclusive
- 開始日付(これを含む)。null以外endDateExclusive
- 終了日付(これを含まない)。null以外ChronoLocalDate.until(ChronoLocalDate)
public long get(TemporalUnit unit)
get
、インタフェースChronoPeriod
TemporalAmount
のget
unit
- 値を返す対象のTemporalUnit
DateTimeException
- 単位がサポートされていない場合UnsupportedTemporalTypeException
- 単位がサポートされていない場合public List<TemporalUnit> getUnits()
サポートされている単位は、YEARS
、MONTHS
、およびDAYS
です。 それらは、年数、月数、日数の順序で返されます。
このセットは、get(TemporalUnit)
と一緒に使用して、期間の全体の状態にアクセスできます。
getUnits
、インタフェースChronoPeriod
TemporalAmount
のgetUnits
public IsoChronology getChronology()
Chronology
は使用中の暦体系を表します。 ISO-8601暦体系は、世界中の大部分で現在使われている近代の常用暦体系です。 これは、現在のうるう年のルールがすべての時間に適用される、先発グレゴリオ暦体系と同等です。
getChronology
、インタフェースChronoPeriod
public boolean isZero()
ゼロの期間では、年数、月数、および日数単位の値はゼロになります。
isZero
、インタフェースChronoPeriod
public boolean isNegative()
これは、年数、月数、または日数単位がゼロ未満であるかどうかを確認します。
isNegative
、インタフェースChronoPeriod
public int getYears()
これは年数単位を返します。
月数単位が年数単位を使って自動的に正規化されることはありません。 これは、「15か月」という期間が「1年と3か月」という期間とは異なることを意味します。
public int getMonths()
これは月数単位を返します。
月数単位が年数単位を使って自動的に正規化されることはありません。 これは、「15か月」という期間が「1年と3か月」という期間とは異なることを意味します。
public int getDays()
これは日数単位を返します。
public Period withYears(int years)
これは、この期間のコピーに年数単位の量を設定します。 月数および日数単位は影響を受けません。
月数単位が年数単位を使って自動的に正規化されることはありません。 これは、「15か月」という期間が「1年と3か月」という期間とは異なることを意味します。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
years
- 表される年数。負の場合もあるPeriod
。null以外public Period withMonths(int months)
これは、この期間のコピーに月数単位の量を設定します。 年数および日数単位は影響を受けません。
月数単位が年数単位を使って自動的に正規化されることはありません。 これは、「15か月」という期間が「1年と3か月」という期間とは異なることを意味します。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
months
- 表される月数。負の場合もあるPeriod
。null以外public Period withDays(int days)
これは、この期間のコピーに日数単位の量を設定します。 年数および月数単位は影響を受けません。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
days
- 表される日数。負の場合もあるPeriod
。null以外public Period plus(TemporalAmount amountToAdd)
これは、年数、月数、および日数に対して別々に演算を行います。 正規化は実行されません。
たとえば、「1年と6か月と3日」に「2年と2か月と2日」を加算すると、「3年と8か月と5日」が返されます。
指定される量は通常、Period
のインスタンスになります。 他の型は、from(TemporalAmount)
を使って解釈されます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
plus
、インタフェースChronoPeriod
amountToAdd
- 加算する量、nullでないPeriod
。null以外DateTimeException
- 指定された量にISO以外の暦が含まれているか、無効な単位が含まれている場合ArithmeticException
- 数値のオーバーフローが発生した場合public Period plusYears(long yearsToAdd)
これは、その量をこの期間のコピーの年数単位に加算します。 月数および日数単位は影響を受けません。 たとえば、「1年と6か月と3日」に2年を加算すると、「3年と6か月と3日」が返されます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
yearsToAdd
- 加算する年数(正または負)Period
。null以外ArithmeticException
- 数値のオーバーフローが発生した場合public Period plusMonths(long monthsToAdd)
これは、その量をこの期間のコピーの月数単位に加算します。 年数および日数単位は影響を受けません。 たとえば、「1年と6か月と3日」に2か月を加算すると、「1年と8か月と3日」が返されます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
monthsToAdd
- 加算する月数(正または負)Period
。null以外ArithmeticException
- 数値のオーバーフローが発生した場合public Period plusDays(long daysToAdd)
これは、その量をこの期間のコピーの日数単位に加算します。 年数および月数単位は影響を受けません。 たとえば、「1年と6か月と3日」に2日を加算すると、「1年と6か月と5日」が返されます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
daysToAdd
- 加算する日数、正または負Period
。null以外ArithmeticException
- 数値のオーバーフローが発生した場合public Period minus(TemporalAmount amountToSubtract)
これは、年数、月数、および日数に対して別々に演算を行います。 正規化は実行されません。
たとえば、「1年と6か月と3日」から「2年と2か月と2日」を減算すると、「-1年と4か月と1日」が返されます。
指定される量は通常、Period
のインスタンスになります。 他の型は、from(TemporalAmount)
を使って解釈されます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
minus
、インタフェースChronoPeriod
amountToSubtract
- 減算する量、nullでないPeriod
。null以外DateTimeException
- 指定された量にISO以外の暦が含まれているか、無効な単位が含まれている場合ArithmeticException
- 数値のオーバーフローが発生した場合public Period minusYears(long yearsToSubtract)
これは、その量をこの期間のコピーの年数単位から減算します。 月数および日数単位は影響を受けません。 たとえば、「1年と6か月と3日」から2年を減算すると、「-1年と6か月と3日」が返されます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
yearsToSubtract
- 減算する年数(正または負)Period
。null以外ArithmeticException
- 数値のオーバーフローが発生した場合public Period minusMonths(long monthsToSubtract)
これは、その量をこの期間のコピーの月数単位から減算します。 年数および日数単位は影響を受けません。 たとえば、「1年と6か月と3日」から2か月を減算すると、「1年と4か月と3日」が返されます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
monthsToSubtract
- 減算する年数(正または負)Period
。null以外ArithmeticException
- 数値のオーバーフローが発生した場合public Period minusDays(long daysToSubtract)
これは、その量をこの期間のコピーの日数単位から減算します。 年数および月数単位は影響を受けません。 たとえば、「1年と6か月と3日」から2日を減算すると、「1年と6か月と1日」が返されます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
daysToSubtract
- 減算する月数(正または負)Period
。null以外ArithmeticException
- 数値のオーバーフローが発生した場合public Period multipliedBy(int scalar)
これは、年数、月数、および日数の各単位を個々に乗算して期間を返します。 たとえば、3を乗算した「2年、-3か月、4日」の期間は、「6年、-9か月、12日」を返します。 正規化は実行されません。
multipliedBy
、インタフェースChronoPeriod
scalar
- 乗算するスカラー、null以外Period
。null以外ArithmeticException
- 数値のオーバーフローが発生した場合public Period negated()
これは、年数、月数、および日数の各単位を個々に否定して期間を返します。 たとえば、「2年、-3か月、4日」の期間は「-2年、3か月、-4日」に否定されます。 正規化は実行されません。
negated
、インタフェースChronoPeriod
Period
。null以外ArithmeticException
- 数値オーバーフローが発生した場合、これはいずれかの単位の値がLong.MIN_VALUE
である場合にのみ発生するpublic Period normalized()
これは、日数単位を変わらないままにして、年数および月数単位を正規化します。 月数単位は11未満の絶対値を持つように調整され、年数単位は補正のために調整されます。 たとえば、「1年と15か月」という期間は「2年と3か月」に正規化されます。
年数および月数単位の符号は、正規化後も同じになります。 たとえば、「1年と-25か月」という期間は「-1年と-1か月」に正規化されます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
normalized
、インタフェースChronoPeriod
Period
。null以外ArithmeticException
- 数値のオーバーフローが発生した場合public long toTotalMonths()
これは、年数に12を掛け、月数を加算することで、その期間の合計月数を返します。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
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
に加算できますが、日数を含む期間は加算できません。 この方法では、必要に応じて年数と月数をまとめて加算することで、月の終わりの処理が正しく行われるようにすることもできます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
addTo
、インタフェースChronoPeriod
TemporalAmount
のaddTo
temporal
- 調整する時間的オブジェクト。null以外DateTimeException
- 加算できない場合ArithmeticException
- 数値のオーバーフローが発生した場合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
から減算できますが、日数を含む期間は減算できません。 この方法では、必要に応じて年数と月数をまとめて減算することで、月の終わりの処理が正しく行われるようにすることもできます。
このインスタンスは不変で、このメソッド呼び出しによって影響を受けません。
subtractFrom
、インタフェースChronoPeriod
TemporalAmount
のsubtractFrom
temporal
- 調整する時間的オブジェクト。null以外DateTimeException
- 減算できない場合ArithmeticException
- 数値のオーバーフローが発生した場合public boolean equals(Object obj)
この比較は、Period
型と、3つの量のそれぞれに基づいて行われます。 等しくなるには、年数、月数、および日数単位が個々に等しい必要があります。 これは、「15か月」の期間が「1年と3か月」の期間と等しくないことを意味することに注意してください。
equals
、インタフェースChronoPeriod
equals
、クラスObject
obj
- チェックするオブジェクト、nullはfalseを返すObject.hashCode()
、HashMap
public int hashCode()
hashCode
、インタフェースChronoPeriod
hashCode
、クラスObject
Object.equals(java.lang.Object)
, System.identityHashCode(java.lang.Object)
public String toString()
String
として出力します(P6Y3M1D
など)。
この出力は、ISO-8601の期間フォーマットになります。 ゼロの期間は、ゼロの日数である「P0D」として表されます。
toString
、インタフェースChronoPeriod
toString
、クラスObject
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。