1. ホーム
  2. java-8

[解決済み] yearとyear-of-eraの違いは何ですか?

2023-07-17 07:14:44

質問

質問 DateTimeFormatter クラスのドキュメントでは、別々のシンボル u は年号と y が年号になります。 https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#patterns

yearとyear-of-eraの違いは何ですか?

どのように解決するのですか?

答えは IsoChronology

  • era - 'Current Era' (CE) と 'Before Current Era' (BCE) の2つのエラがあります。
  • year-of-era - year-of-era は現在の CE 時代の proleptic-year と同じです。ISO エポック以前の BCE 時代については、時間が逆行するにつれて年は 1 から上に増加します。
  • proleptic-year - proleptic year は、現在の時代の year-of-era と同じです。前の時代では、年は 0、次に負の値を持ちます。

u を使うとプロレップスイヤーが出ます。 y を実行すると、その時代の年号が得られます。

この違いは、主に紀元前の年号について重要です。プロレプティックイヤー0は実際には紀元前1年で、その後にプロレプティックイヤー1が続き、それは紀元後1年になります。プロレプティクスの年はマイナスにすることができますが、紀元はそうではありません。

これがどのように機能するかを視覚化するのに役立つスニペットです。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("'proleptic' : u '= era:' y G");

for (int i = 5; i > -6 ; i--) {
    LocalDate localDate = LocalDate.of(i, 3, 14);
    System.out.println(formatter.format(localDate));
}

出力します。

proleptic : 5 = era: 5 AD
proleptic : 4 = era: 4 AD
proleptic : 3 = era: 3 AD
proleptic : 2 = era: 2 AD
proleptic : 1 = era: 1 AD
proleptic : 0 = era: 1 BC
proleptic : -1 = era: 2 BC
proleptic : -2 = era: 3 BC
proleptic : -3 = era: 4 BC
proleptic : -4 = era: 5 BC
proleptic : -5 = era: 6 BC