java - LocalDate.parse 导致“DateTimeParseException ...无法解析:null”
问题描述
我正在尝试解析日期时间戳并仅提取日期。像这样:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
class FormatterMain {
public static void main(String[] args) {
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssz");
System.out.println(LocalDate.parse("2020-10-14T10:00:00Z", formatter));
}
}
但这会导致以下异常:
Exception in thread "main" java.time.format.DateTimeParseException: Text '2020-10-14T10:00:00Z' could not be parsed: null
at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:2017)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1952)
at java.base/java.time.LocalDate.parse(LocalDate.java:428)
at FormatterMain.main(FormatterMain.java:8)
Caused by: java.lang.NullPointerException
at java.base/java.time.format.DateTimeFormatterBuilder$PrefixTree.prefixLength(DateTimeFormatterBuilder.java:4527)
at java.base/java.time.format.DateTimeFormatterBuilder$PrefixTree.add0(DateTimeFormatterBuilder.java:4396)
at java.base/java.time.format.DateTimeFormatterBuilder$PrefixTree.add(DateTimeFormatterBuilder.java:4391)
at java.base/java.time.format.DateTimeFormatterBuilder$ZoneTextPrinterParser.getTree(DateTimeFormatterBuilder.java:4138)
at java.base/java.time.format.DateTimeFormatterBuilder$ZoneIdPrinterParser.parse(DateTimeFormatterBuilder.java:4249)
at java.base/java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.parse(DateTimeFormatterBuilder.java:2370)
at java.base/java.time.format.DateTimeFormatter.parseUnresolved0(DateTimeFormatter.java:2107)
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2036)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
... 2 more
这似乎与这个问题有关:https ://bugs.openjdk.java.net/browse/JDK-8226704 。但是我堆栈中的行号与问题中的行号不匹配。感谢任何关于可能出现问题的指示。
PS:
$ java -version
openjdk version "11.0.7" 2020-04-14 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.7+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.7+10-LTS, mixed mode, sharing)
解决方案
时间戳字符串中末尾的“Z”?你可以X
在你的模式字符串中得到它。不是z
。格式字符串中的小写z
表示“时区名称”并匹配类似的东西PST
or Pacific Standard Time
。
X
是缩短的区域偏移。类似于-08
or的东西Z
。
推荐阅读
- java - ant run 命令的 JAVA_HOME 路径
- excel - 如何使用 VBA 在 Excel ListColumn 的 DataBodyRange 中从倒数第二个单元格中选择范围
- powershell - 等待安装过程向前移动 -Powershell
- javascript - 无法使用带有 GetElementByClass 的 span 类关闭模式框
- python - 如何在另一个文件夹中导入文件
- camunda - 如何以嵌入式形式访问流程变量
- python - python中的二维数组(非列表)
- javascript - 我无法使用 express res.cookie 发送 cookie
- javascript - 使用不同的并使用nodeJS一起排序
- java - 如何指示某些字段不支持