I am attempting to parse a date time stamp and extract only the date. Like so:
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)); } }
But this results in the following Exception:
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
This seems related to this issue: https://bugs.openjdk.java.net/browse/JDK-8226704. But the line numbers in my stack do not match up with those in the issue. Appreciate any pointers on what could be going wrong.
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)
Advertisement
Answer
The ‘Z’ at the end there in your timestamp string? You get that with X
in your pattern string. Not z
. lower-case z
in the format string means ‘time zone name’ and matches something like PST
or Pacific Standard Time
.
X
is a shortened zone offset. something like -08
or Z
.