11

次のコードを検討してください。

Date date = new SimpleDateFormat("MMddyyyy").parse("01011500");

LocalDate localDateRight = LocalDate.parse(formatter.format(date), dateFormatter);
LocalDate localDateWrong = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toLocalDate();

System.out.println(date);           // Wed Jan 01 00:00:00 EST 1500
System.out.println(localDateRight); // 1500-01-01
System.out.println(localDateWrong); // 1500-01-10

1582 年がユリウス暦とグレゴリオ暦の境界であることは知っています。私が知らないのは、なぜこれが起こるのか、またはそれを調整する方法です。

これが私がこれまでに理解したものです:

  • オブジェクトがBaseCalender設定されている日付JulianCalendar
  • date.toInstant()ただ戻るInstant.ofEpochMilli(getTime())
  • date.getTime()-14830974000000 を返します
  • -14830974000000 は 1500 年 1 月 10 日水曜日 05:00:00 GMTグレゴリオ暦

したがって、返されたミリ秒getTime()が間違っている (可能性は低い) か、予想とは異なるようで、その違いを説明する必要があります。

4

1 に答える 1