Java 8 date/time: instant, could not be parsed at index 19
我有以下代码:
1 2 3 4 5 |
它给了我以下例外:
Exception in thread"main" java.time.format.DateTimeParseException:
Text '2016-09-18T12:17:21:000Z' could not be parsed at index 19 at
java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at
java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.Instant.parse(Instant.java:395) at
core.domain.converters.TestDateTime.main(TestDateTime.java:10)
当我将最后一个冒号改为句号时:
1 |
...然后执行顺利:
2016-09-18T15:17:21+03:00[Europe/Kiev]
那么,问题是 - 如何用
"问题"是毫秒之前的冒号,它是非标准的(标准是小数点)。
要使其工作,您必须为自定义格式构建自定义
1 2 3 4 5 6 7 8 9 10 | String dateInString ="2016-09-18T12:17:21:000Z"; DateTimeFormatter formatter = new DateTimeFormatterBuilder() .append(DateTimeFormatter.ISO_DATE_TIME) .appendLiteral(':') .appendFraction(ChronoField.MILLI_OF_SECOND, 3, 3, false) .appendLiteral('Z') .toFormatter(); LocalDateTime instant = LocalDateTime.parse(dateInString, formatter); ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Europe/Kiev")); System.out.println(zonedDateTime); |
输出此代码:
1 | 2016-09-18T12:17:21+03:00[Europe/Kiev] |
如果你的datetime文字有一个点而不是最后一个冒号,事情会简单得多。
使用
1 2 3 4 5 | String dateInString ="2016-09-18T12:17:21:000Z"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSS"); Instant instant = sdf.parse(dateInString).toInstant(); ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Europe/Kiev")); System.out.println(zonedDateTime); |
2016-09-18T19:17:21+03:00[Europe/Kiev]
1 2 3 4 5 6 | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/MM/yyyy"); String date ="16/08/2016"; //convert String to LocalDate LocalDate localDate = LocalDate.parse(date, formatter); |
如果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
看看这个网站
网站在这里