Java : Year (年) - API使用例

Year (Java SE 17 & JDK 17)の使用例まとめです。
だいたいのメソッドを網羅済みです。
公式API仕様のおともにどうぞ。


概要

クラス構成

Year は、日付の年を表します。
例えば、

  • 1999年
  • 2022年

などが表現できます。

オブジェクトの生成には of メソッドを使います。

final var year = Year.of(1999);
System.out.println(year); // 1999

// 現在の年を取得します。
final var now = Year.now();
System.out.println(now); // 2022

フィールド

static final int MAX_VALUE

サポートされている最大の年である「+999,999,999」です。

System.out.println(Year.MAX_VALUE); // 999999999

static final int MIN_VALUE

サポートされている最小の年である「-999,999,999」です。

System.out.println(Year.MIN_VALUE); // -999999999

メソッド

Temporal adjustInto (Temporal temporal)

指定された時間的オブジェクトをこの年になるように調整します。

final var year = Year.of(1999);
System.out.println(year); // 1999

final var date = LocalDate.of(2001, 2, 3);
System.out.println(date); // 2001-02-03

final var ret = year.adjustInto(date);
System.out.println(ret); // 1999-02-03

LocalDate atDay (int dayOfYear)

この年を「年の日」と組み合せてLocalDateを作成します。

final var year = Year.of(1999);
System.out.println(year); // 1999

System.out.println(year.atDay(2)); // 1999-01-02
System.out.println(year.atDay(3)); // 1999-01-03
System.out.println(year.atDay(32)); // 1999-02-01
System.out.println(year.atDay(365)); // 1999-12-31

// DateTimeException: Invalid date 'DayOfYear 366' as '1999' is not a leap year
//year.atDay(366);

YearMonth atMonth (int month)

この年を月と組み合せてYearMonthを作成します。

final var year = Year.of(2000);
System.out.println(year); // 2000

System.out.println(year.atMonth(1)); // 2000-01
System.out.println(year.atMonth(Month.JANUARY)); // 2000-01

System.out.println(year.atMonth(2)); // 2000-02
System.out.println(year.atMonth(Month.FEBRUARY)); // 2000-02

System.out.println(year.atMonth(12)); // 2000-12
System.out.println(year.atMonth(Month.DECEMBER)); // 2000-12

// DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 13
//year.atMonth(13);

YearMonth atMonth (Month month)

この年を月と組み合せてYearMonthを作成します。

このメソッドの使用例は、atMonth(int month) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

LocalDate atMonthDay (MonthDay monthDay)

この年を月-日と組み合せてLocalDateを作成します。

final var year = Year.of(2000);
System.out.println(year); // 2000

final var monthDay1 = MonthDay.of(1, 2);
System.out.println(monthDay1); // --01-02
System.out.println(year.atMonthDay(monthDay1)); // 2000-01-02

final var monthDay2 = MonthDay.of(12, 31);
System.out.println(monthDay2); // --12-31
System.out.println(year.atMonthDay(monthDay2)); // 2000-12-31

int compareTo (Year other)

この年をもう一方の年と比較します。

final var year1 = Year.of(2000);
final var year2 = Year.of(2000);

System.out.println(year1); // 2000
System.out.println(year2); // 2000

System.out.println(year1.compareTo(year2)); // 0
final var year1 = Year.of(1234);
final var year2 = Year.of(5678);

System.out.println(year1); // 1234
System.out.println(year2); // 5678

System.out.println(year1.compareTo(year2)); // -4444
final var year1 = Year.of(1234);
final var year2 = Year.of(-1234);

System.out.println(year1); // 1234
System.out.println(year2); // -1234

System.out.println(year1.compareTo(year2)); // 2468

boolean equals (Object obj)

この年がもう一方の年と等しいかどうかを確認します。

final var year1 = Year.of(2000);
final var year2 = Year.of(2000);

System.out.println(year1); // 2000
System.out.println(year2); // 2000

System.out.println(year1.equals(year2)); // true
final var year1 = Year.of(1234);
final var year2 = Year.of(5678);

System.out.println(year1); // 1234
System.out.println(year2); // 5678

System.out.println(year1.equals(year2)); // false
final var year1 = Year.of(1234);
final var year2 = Year.of(-1234);

System.out.println(year1); // 1234
System.out.println(year2); // -1234

System.out.println(year1.equals(year2)); // false

String format (DateTimeFormatter formatter)

指定されたフォーマッタを使用してこの年を書式設定します。

final var year = Year.of(2004);
System.out.println(year); // 2004

final var ret1 = year.format(DateTimeFormatter.ofPattern("yyyy"));
System.out.println(ret1); // 2004

final var ret2 = year.format(DateTimeFormatter.ofPattern("yy"));
System.out.println(ret2); // 04

static Year from (TemporalAccessor temporal)

時間的オブジェクトからYearのインスタンスを取得します。

final var date = LocalDate.of(2001, 2, 3);
System.out.println(date); // 2001-02-03

final var ret = Year.from(date);
System.out.println(ret); // 2001
final var dateTime = LocalDateTime.of(1999, 1, 1, 12, 30);
System.out.println(dateTime); // 1999-01-01T12:30

final var ret = Year.from(dateTime);
System.out.println(ret); // 1999

int get (TemporalField field)

この年から指定されたフィールドの値をintとして取得します。

final var year = Year.of(2000);
System.out.println(year); // 2000

System.out.println(year.get(ChronoField.YEAR)); // 2000
System.out.println(year.get(ChronoField.YEAR_OF_ERA)); // 2000
System.out.println(year.get(ChronoField.ERA)); // 1
final var year = Year.of(-100);
System.out.println(year); // -100

System.out.println(year.get(ChronoField.YEAR)); // -100
System.out.println(year.get(ChronoField.YEAR_OF_ERA)); // 101
System.out.println(year.get(ChronoField.ERA)); // 0

long getLong (TemporalField field)

この年から指定されたフィールドの値をlongとして取得します。

final var year = Year.of(2000);
System.out.println(year); // 2000

System.out.println(year.getLong(ChronoField.YEAR)); // 2000
System.out.println(year.getLong(ChronoField.YEAR_OF_ERA)); // 2000
System.out.println(year.getLong(ChronoField.ERA)); // 1
final var year = Year.of(-100);
System.out.println(year); // -100

System.out.println(year.getLong(ChronoField.YEAR)); // -100
System.out.println(year.getLong(ChronoField.YEAR_OF_ERA)); // 101
System.out.println(year.getLong(ChronoField.ERA)); // 0

int getValue ()

年の値を取得します。

final var year = Year.of(2000);
System.out.println(year.getValue()); // 2000
final var year = Year.of(-100);
System.out.println(year.getValue()); // -100

int hashCode ()

この年のハッシュ・コードです。

final var year = Year.of(2000);
System.out.println(year); // 2000
System.out.println(year.hashCode()); // 2000
final var year = Year.of(-100);
System.out.println(year); // -100
System.out.println(year.hashCode()); // -100

boolean isAfter (Year other)

この年が、指定された年より後にあるかどうかをチェックします。

final var year = Year.of(2000);
System.out.println(year); // 2000

final var year2 = Year.of(1999);
final var year3 = Year.of(2000);
final var year4 = Year.of(2001);

System.out.println(year2); // 1999
System.out.println(year3); // 2000
System.out.println(year4); // 2001

System.out.println(year.isAfter(year2)); // true
System.out.println(year.isAfter(year3)); // false
System.out.println(year.isAfter(year4)); // false

boolean isBefore (Year other)

この年が、指定された年より前にあるかどうかをチェックします。

final var year = Year.of(2000);
System.out.println(year); // 2000

final var year2 = Year.of(1999);
final var year3 = Year.of(2000);
final var year4 = Year.of(2001);

System.out.println(year2); // 1999
System.out.println(year3); // 2000
System.out.println(year4); // 2001

System.out.println(year.isBefore(year2)); // false
System.out.println(year.isBefore(year3)); // false
System.out.println(year.isBefore(year4)); // true

boolean isLeap ()

ISO先発暦体系のルールに従って、年がうるう年であるかどうかをチェックします。

final var year = Year.of(1999);
System.out.println(year); // 1999
System.out.println(year.isLeap()); // false

final var monthDay = MonthDay.of(2, 29);
System.out.println(monthDay); // --02-29
System.out.println(year.isValidMonthDay(monthDay)); // false
final var year = Year.of(2000);
System.out.println(year); // 2000
System.out.println(year.isLeap()); // true

final var monthDay = MonthDay.of(2, 29);
System.out.println(monthDay); // --02-29
System.out.println(year.isValidMonthDay(monthDay)); // true

static boolean isLeap (long year)

ISO先発暦体系のルールに従って、年がうるう年であるかどうかをチェックします。

System.out.println(Year.isLeap(1999)); // false

// DateTimeException: Invalid date 'February 29' as '1999' is not a leap year
//LocalDate.of(1999, 2, 29);
System.out.println(Year.isLeap(2000)); // true

final var date = LocalDate.of(2000, 2, 29);
System.out.println(date); // 2000-02-29

boolean isSupported (TemporalField field)

指定されたフィールドがサポートされているかどうかをチェックします。

final var year = Year.of(2000);
System.out.println(year); // 2000

System.out.println(year.isSupported(ChronoField.YEAR)); // true
System.out.println(year.isSupported(ChronoField.YEAR_OF_ERA)); // true
System.out.println(year.isSupported(ChronoField.ERA)); // true

boolean isSupported (TemporalUnit unit)

指定された単位がサポートされているかどうかをチェックします。

final var year = Year.of(2000);
System.out.println(year); // 2000

System.out.println(year.isSupported(ChronoUnit.YEARS)); // true
System.out.println(year.isSupported(ChronoUnit.DECADES)); // true
System.out.println(year.isSupported(ChronoUnit.CENTURIES)); // true
System.out.println(year.isSupported(ChronoUnit.MILLENNIA)); // true
System.out.println(year.isSupported(ChronoUnit.ERAS)); // true

boolean isValidMonthDay (MonthDay monthDay)

月-日がこの年に対して有効であるかどうかを確認します。

このメソッドの使用例は、isLeap() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

int length ()

この年の長さを日数で取得します。

final var year1 = Year.of(1999);
System.out.println(year1); // 1999
System.out.println(year1.length()); // 365
System.out.println(year1.isLeap()); // false

final var year2 = Year.of(2000);
System.out.println(year2); // 2000
System.out.println(year2.length()); // 366
System.out.println(year2.isLeap()); //true

Year minus (long amountToSubtract, TemporalUnit unit)

指定された量を減算して、この年のコピーを返します。

final var year = Year.of(2000);
System.out.println(year); // 2000

final var ret1 = year.minus(1, ChronoUnit.YEARS);
System.out.println(ret1); // 1999

final var ret2 = year.minus(2, ChronoUnit.YEARS);
System.out.println(ret2); // 1998

final var ret3 = year.minus(3000, ChronoUnit.YEARS);
System.out.println(ret3); // -1000
final var year = Year.of(2000);
System.out.println(year); // 2000

final var ret1 = year.minus(1, ChronoUnit.DECADES);
System.out.println(ret1); // 1990

final var ret2 = year.minus(1, ChronoUnit.CENTURIES);
System.out.println(ret2); // 1900

final var ret3 = year.minus(1, ChronoUnit.MILLENNIA);
System.out.println(ret3); // 1000

Year minus (TemporalAmount amountToSubtract)

指定された量を減算して、この年のコピーを返します。

final var year = Year.of(2000);
System.out.println(year); // 2000

final var period = Period.ofYears(20);
System.out.println(period); // P20Y

final var ret = year.minus(period);
System.out.println(ret); // 1980

Year minusYears (long yearsToSubtract)

指定された年数を減算して、このYearのコピーを返します。

final var year = Year.of(2000);
System.out.println(year); // 2000

final var ret1 = year.minusYears(1);
System.out.println(ret1); // 1999

final var ret2 = year.minusYears(2);
System.out.println(ret2); // 1998

final var ret3 = year.minusYears(3000);
System.out.println(ret3); // -1000

static Year now ()

デフォルトのタイムゾーンのシステム・クロックから現在の年を取得します。

final var year = Year.now();
System.out.println(year); // 2022

static Year now (Clock clock)

指定されたクロックから現在の年を取得します。

// 意図的に10年進めたClock
final var clock = Clock.offset(Clock.systemDefaultZone(), Duration.ofDays(3650));

System.out.println(Year.now()); // 2022
System.out.println(Year.now(clock)); // 2032

static Year now (ZoneId zone)

指定されたタイムゾーンのシステム・クロックから現在の年を取得します。

final var zoneId = ZoneId.systemDefault();
System.out.println(zoneId); // Asia/Tokyo

System.out.println(Year.now(zoneId)); // 2022

static Year of (int isoYear)

Yearのインスタンスを取得します。

final var year1 = Year.of(2022);
System.out.println(year1); // 2022

final var year2 = Year.of(1999);
System.out.println(year2); // 1999

final var year3 = Year.of(-100);
System.out.println(year3); // -100

static Year parse (CharSequence text)

2007などのテキスト文字列からYearのインスタンスを取得します。

final var year1 = Year.parse("2000");
System.out.println(year1); // 2000

final var year2 = Year.parse("1999");
System.out.println(year2); // 1999

final var year3 = Year.parse("-100");
System.out.println(year3); // -100

static Year parse (CharSequence text, DateTimeFormatter formatter)

特定のフォーマッタを使用して、テキスト文字列からYearのインスタンスを取得します。

final var year1 = Year.parse("1999", DateTimeFormatter.ofPattern("yyyy"));
System.out.println(year1); // 1999

final var year2 = Year.parse("06", DateTimeFormatter.ofPattern("yy"));
System.out.println(year2); // 2006

Year plus (long amountToAdd, TemporalUnit unit)

指定された量を加算して、この年のコピーを返します。

final var year = Year.of(2000);
System.out.println(year); // 2000

final var ret1 = year.plus(1, ChronoUnit.YEARS);
System.out.println(ret1); // 2001

final var ret2 = year.plus(2, ChronoUnit.YEARS);
System.out.println(ret2); // 2002

final var ret3 = year.plus(345, ChronoUnit.YEARS);
System.out.println(ret3); // 2345
final var year = Year.of(2000);
System.out.println(year); // 2000

final var ret1 = year.plus(1, ChronoUnit.DECADES);
System.out.println(ret1); // 2010

final var ret2 = year.plus(1, ChronoUnit.CENTURIES);
System.out.println(ret2); // 2100

final var ret3 = year.plus(1, ChronoUnit.MILLENNIA);
System.out.println(ret3); // 3000

Year plus (TemporalAmount amountToAdd)

指定された量を加算して、この年のコピーを返します。

final var year = Year.of(2000);
System.out.println(year); // 2000

final var period = Period.ofYears(20);
System.out.println(period); // P20Y

final var ret = year.plus(period);
System.out.println(ret); // 2020

Year plusYears (long yearsToAdd)

指定された年数を加算して、このYearのコピーを返します。

final var year = Year.of(2000);
System.out.println(year); // 2000

final var ret1 = year.plusYears(1);
System.out.println(ret1); // 2001

final var ret2 = year.plusYears(2);
System.out.println(ret2); // 2002

final var ret3 = year.plusYears(345);
System.out.println(ret3); // 2345

<R> R query (TemporalQuery<R> query)

指定された問合せを使用してこの年を問い合せます。

final var year = Year.of(2000);
System.out.println(year); // 2000

final var ret = year.query(TemporalQueries.precision());
System.out.println(ret); // Years

ValueRange range (TemporalField field)

指定されたフィールドの有効な値の範囲を取得します。

final var year = Year.of(2000);
System.out.println(year); // 2000

System.out.println(year.range(ChronoField.YEAR)); // -999999999 - 999999999
System.out.println(year.range(ChronoField.YEAR_OF_ERA)); // 1 - 999999999
System.out.println(year.range(ChronoField.ERA)); // 0 - 1

String toString ()

この年をStringとして出力します。

final var str1 = Year.of(1999).toString();
System.out.println(str1); // 1999

final var str2 = Year.of(2000).toString();
System.out.println(str2); // 2000

final var str3 = Year.of(-100).toString();
System.out.println(str3); // -100

long until (Temporal endExclusive, TemporalUnit unit)

別の年までの時間量を指定された単位で計算します。

final var start = Year.of(2000);
System.out.println(start); // 2000

final var end = Year.of(2050);
System.out.println(end); // 2050

final var ret1 = start.until(end, ChronoUnit.YEARS);
System.out.println(ret1); // 50

final var ret2 = start.until(end, ChronoUnit.DECADES);
System.out.println(ret2); // 5

Year with (TemporalAdjuster adjuster)

この年の調整済のコピーを返します。

final var year = Year.of(2000);
System.out.println(year); // 2000

final var ret = year.with(temporal -> Year.of(temporal.get(ChronoField.YEAR) * 2));
System.out.println(ret); // 4000

Year with (TemporalField field, long newValue)

指定されたフィールドを新しい値に設定して、この年のコピーを返します。

final var year = Year.of(2000);
System.out.println(year); // 2000

final var ret = year.with(ChronoField.YEAR, 1999);
System.out.println(ret); // 1999

関連記事

ページの先頭へ