次のコードを検討してください。
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()
が間違っている (可能性は低い) か、予想とは異なるようで、その違いを説明する必要があります。