将带时区的过去 gregorianCalendar 日期转换为 localDate return 错误时间
Converting past gregorianCalendar date with timezone to localDate return bad time
当我将 GregorianCalendar 转换为 LocalDate 时,我遇到了这个问题:
System.out.println(((GregorianCalendar) DatatypeConverter.parseDateTime("1945-10-01+02:00")).toZonedDateTime()
.withZoneSameInstant(ZoneId.systemDefault()).toLocalDate());
return1945-10-01
什么都行
System.out.println(((GregorianCalendar) DatatypeConverter.parseDateTime("1945-10-02+02:00")).toZonedDateTime()
.withZoneSameInstant(ZoneId.systemDefault()).toLocalDate());
return 同一日期:1945-10-01
哪里不对
为什么?
我的时区是布拉格。当我检查 this side +2h 应该到 18.11 而不是到 10.1
Java时间API依赖IANA Time Zone Database。根据它,时间偏移发生在10.1:
Rule Czech 1945 only - Oct 1 2:00s 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 数据库版本。)
当我将 GregorianCalendar 转换为 LocalDate 时,我遇到了这个问题:
System.out.println(((GregorianCalendar) DatatypeConverter.parseDateTime("1945-10-01+02:00")).toZonedDateTime()
.withZoneSameInstant(ZoneId.systemDefault()).toLocalDate());
return1945-10-01
什么都行
System.out.println(((GregorianCalendar) DatatypeConverter.parseDateTime("1945-10-02+02:00")).toZonedDateTime()
.withZoneSameInstant(ZoneId.systemDefault()).toLocalDate());
return 同一日期:1945-10-01
哪里不对
为什么?
我的时区是布拉格。当我检查 this side +2h 应该到 18.11 而不是到 10.1
Java时间API依赖IANA Time Zone Database。根据它,时间偏移发生在10.1:
Rule Czech 1945 only - Oct 1 2:00s 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 数据库版本。)