0

次のコード スニペットは、1 年以上の日付に対して完全に機能します1600。しかし、それは何年にもわたって間違った出力を出し1001, 1500, 1400ます.理由を説明できますか?

SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");

XMLGregorianCalendar cal DatatypeFactory.newInstance().newXMLGregorianCalendar("1600-01-01");

String birthDate = format.format(cal.toGregorianCalendar().getTime());

System.out.println(birthDate);
4

3 に答える 3

1

XMLGregorianCalendar をGregorianCalendarに変換した後、DateFormat が「間違った」年を表示する理由は、GregorianCalendar.getGregorianChange() のデフォルトが 1582-10-15 であるためです。

GregorianCalendar がグレゴリオ暦の変更日より前の日付に設定されている場合、実際にはユリウス暦の日付を表しているため、これら 2 つの暦では 1 年の長さが異なるため、年が「正しくない」ように見えます。 .

これを修正するには、GregorianCalendar.setGregorianChange() を使用して、この値を以前の日付に設定し、ユリウス暦に変更しないようにすることができます。

于 2013-03-25T13:45:33.933 に答える
1

グレゴリオ暦が 1582 年に始まったことは、1600 年には機能するのに 1500 年には機能しない理由を説明していると確信しています。

于 2013-03-22T10:21:38.223 に答える
-1

よくわかりません。しかし、エポック (日付) を指していると思いますが... エポックは 1970 年に始まります (1960 年ではありません)。

また、グレゴリオ暦にはいくつかの制限があります (それぞれに言及することはできませんが..)、たとえば、「ゼロ」年からの日付を使用することはできません。 、代わりに、Before Christ を参照する必要があります...よくわかりません)。

ただし...「エポック」を見て回る必要があります。そして、これが正しい答えを見つけるのに役立つことを願っています。

于 2013-01-26T22:54:18.787 に答える