Nin*_*ter 2 java datetime-format zoneddatetime
我有日期字符串“2015-01-12T13:00:00.000+02:00”。查看 JavaDoc 我看到以下内容:
Run Code Online (Sandbox Code Playgroud)z time-zone name zone-name Pacific Standard Time; PST Z zone-offset offset-Z +0000; -0800; -08:00;
所以我怀疑要解析它,我必须使用大写“Z”,因为我在 +02:00 中给出了区域格式:
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000Z");
Run Code Online (Sandbox Code Playgroud)
但这样我就得到了解析错误。
如果我使用小写“z”,它会起作用:
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000z")
Run Code Online (Sandbox Code Playgroud)
有谁知道发生了什么事吗?
代码:
DateTimeFormatter changetimeParser_Z = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000Z");
DateTimeFormatter changetimeParser_z = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000z");
String time = "2015-01-12T13:00:00.000+02:00";
ZonedDateTime time1 = ZonedDateTime.parse(time, changetimeParser_z);
System.out.println(time1);
ZonedDateTime time2 = ZonedDateTime.parse(time, changetimeParser_Z);
System.out.println(time2);
Run Code Online (Sandbox Code Playgroud)
异常堆栈跟踪:
2015-01-12T13:00+02:00
java.time.format.DateTimeParseException: Text '2015-01-12T13:00:00.000+02:00' could not be parsed at index 23
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.ZonedDateTime.parse(ZonedDateTime.java:597)
Run Code Online (Sandbox Code Playgroud)
我认为这是 Javadoc 中的一个错误,这部分是一个错误
Symbol Meaning Presentation Examples<br>
------ ------- ------------ -------
Z zone-offset offset-Z +0000; -0800; -08:00;
Run Code Online (Sandbox Code Playgroud)
因为如果你进一步阅读你会发现偏移量的解释Z
偏移 Z:这根据模式字母的数量格式化偏移。一个、两个或三个字母输出小时和分钟,不带冒号,例如“+0130”。当偏移量为零时,输出将为“+0000”。四个字母输出完整形式的本地化偏移量,相当于四个字母的 Offset-O。如果偏移量为零,则输出将是相应的本地化偏移文本。五个字母输出小时、分钟,如果非零则可选秒,并带有冒号。如果偏移量为零,则输出“Z”。六个或更多字母将引发 IllegalArgumentException。
符合RFC 822。
对我来说,该模式的行为应与SimpleDateFormat相同