对于过去的某个日期,GregorianCalendar.toZonedDateTime()返回的日期是1天休息。
对于1893年4月2日,toZonedDateTime()返回相同的日期,对于1893年4月1日,ZonedDateTime向我显示1893年3月31日,并且“一年中的天”值也有所不同。在此“魔术”日期之前的日期始终存在偏移量。
以下是一些示例代码:
final GregorianCalendar gc = new GregorianCalendar(1893,1); // Set to 1st January 1893
for(int i = 1; i < 365; i++) {
gc.set(Calendar.DAY_OF_YEAR,i); // Update day of year
final ZonedDateTime zdt = gc.toZonedDateTime();
System.out.println(String.format(
"GC: %02d.%02d.%d (%d) -> ZDT: %02d.%02d.%d (%d)",gc.get(Calendar.DAY_OF_MONTH),gc.get(Calendar.MONTH) + 1,// "+1" is needed,because GregorianCalendar encodes January as 0.
gc.get(Calendar.YEAR),gc.get(Calendar.DAY_OF_YEAR),zdt.getDayOfMonth(),zdt.getMonthValue(),zdt.getYear(),zdt.getDayOfYear()
));
}
运行代码时,您将获得输出
[...]
GC: 31.03.1893 (90) -> ZDT: 30.03.1893 (89)
GC: 01.04.1893 (91) -> ZDT: 31.03.1893 (90)
GC: 02.04.1893 (92) -> ZDT: 02.04.1893 (92)
GC: 03.04.1893 (93) -> ZDT: 03.04.1893 (93)
[...]
我在这里做什么错了?
提前感谢您的回答!
最好的问候, 马库斯