当我将GregorianCalendar转换为LocalDate时,出现此问题:
System.out.println(((GregorianCalendar) DatatypeConverter.parseDateTime("1945-10-01+02:00")).toZonedDateTime()
.withZoneSameInstant(ZoneId.systemDefault()).toLocalDate());
返回1945-10-01
是可以的
System.out.println(((GregorianCalendar) DatatypeConverter.parseDateTime("1945-10-02+02:00")).toZonedDateTime()
.withZoneSameInstant(ZoneId.systemDefault()).toLocalDate());
返回相同的日期:1945-10-01
不正确
为什么?
我的时区专家布拉格。当我检查this边+ 2h应该到18.11而不是到10.1
答案 0 :(得分:0)
Java Time API依赖于IANA Time Zone Database。据此,时移发生在10.1:
Rule Czech 1945 only - Oct 1 2:00s 0 -
答案 1 :(得分:0)
您可能只是省略了时区转换:
System.out.println(((GregorianCalendar) DatatypeConverter.parseDateTime("1945-10-02+02:00")).toZonedDateTime()
.toLocalDate());
1945-10-02
或者在没有DatatypeConverter
的情况下解析自己:
System.out.println(DateTimeFormatter.ISO_OFFSET_DATE
.parse("1945-10-02+02:00", LocalDate::from));
1945-10-02
(对IANA或timeanddate.com是否正确感到好奇;我通常对这两者都抱有很高的信心。一种可能的解释是timeanddate.com是否依赖于较早的IANA数据库版本。)