【发布时间】:2017-03-27 13:34:32
【问题描述】:
我在解析以下日期格式时遇到问题:
2017-03-27T08:27:43.326TGMT-05:00
我有代码,其中DateTimeFormatter 从ZonedDateTime 生成字符串,下一步我试图再次解析这个字符串并创建ZonedDateTime 实例,但是它没有按我的预期工作:
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'T'ZZZZ";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
String dateStr = ZonedDateTime.now().format(formatter);
System.out.println(dateStr);
ZonedDateTime dateParsed = ZonedDateTime.parse(dateStr, formatter);
System.out.println(dateParsed);
上面的代码产生:
2017-03-27T08:27:43.326TGMT-05:00
java.time.format.DateTimeParseException: Text '2017-03-27T08:27:43.326TGMT-05:00' could not be parsed: String index out of range: 33
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855)
寻找有关如何提出能够从 2017-03-27T08:27:43.326TGMT-05:00 中创建 ZonedDateTime 实例的工作模式的任何见解
【问题讨论】:
-
将您的模式更改为:
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'T'ZZZZZ";(多一个 Z)并且它可以工作 -
似乎也只适用于三个 Z。
-
@BrianClapper 但三个 Z 导致输出与 OP 的
..512T-0500而不是..512TGMT-05:00略有不同 -
同意。我只是添加了另一个数据点。 ZZZ 和 ZZZZZ 有效,但 ZZZZ 无效。对我来说,这似乎是 JDK 中的一个错误。无论如何,OP 现在有一些可用的选项。
-
查看文档(向下滚动)以查看四个和五个 Z 之间的区别,并注意模式字母 x - docs.oracle.com/javase/8/docs/api/java/time/format/…
标签: java datetime-format java-time