【发布时间】:2016-09-12 05:06:24
【问题描述】:
我正在尝试使用 Java 8 新日期模式而不是 Joda,但我遇到了以下问题:
两个
ZonedDateTime.parse("02/05/16 11:51.12.083 +04:30", DateTimeFormatter.ofPattern("dd/MM/yy HH:mm.ss.SSS Z"))
和
LocalDateTime.parse("02/05/16 11:51.12.083 +04:30", DateTimeFormatter.ofPattern("dd/MM/yy HH:mm.ss.SSS Z"))
抛出“java.time.format.DateTimeParseException”异常。 而
org.joda.time.DateTime.parse("02/05/16 11:51.12.083 +04:30", DateTimeFormat.forPattern("dd/MM/yy HH:mm.ss.SSS Z"))
工作正常。
异常原因是:
java.time.format.DateTimeParseException:无法在索引 22 处解析文本“02/05/16 11:51.12.083 +04:30”
我做错了吗?
【问题讨论】:
-
你试过 OffsetDateTime 吗?它不包含足够的信息来了解实际时区;它所携带的只是与 UTC 的偏移量。
-
虽然从docs 中的示例来看,似乎冒号被接受为区域偏移分隔符,但是当您尝试它时,它会引发异常。如果您只是删除冒号,它应该可以工作。所以你的日期时间字符串应该是
02/05/16 11:51.12.083 +0430 -
@Hank DI 试过这个 OffsetDateTime.parse("02/05/16 11:51.12.083 +04:30",DateTimeFormatter.ofPattern("dd/MM/YY HH:mm.ss. SSS Z")) 但我仍然遇到同样的异常。
-
@Rahul 我不控制输入,所以我无法删除冒号,如果这是您的意思,我不喜欢将其解析为字符串。同样,即使删除了冒号,我仍然会遇到同样的异常。 (ZonedDateTime.parse("02/05/16 11:51.12.083 +0430",DateTimeFormatter.ofPattern("dd/MM/YY HH:mm.ss.SSS Z")))
-
这次的错误肯定不一样,你有大写的'YY'改成小写的'yy'。
标签: datetime timezone java-8 jodatime java-time