当前位置: 首页 > 知识库问答 >
问题:

Java 8 date/time:instant,无法在索引19处解析

丁均
2023-03-14
String dateInString = "2016-09-18T12:17:21:000Z";
Instant instant = Instant.parse(dateInString);

ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Europe/Kiev"));
System.out.println(zonedDateTime);
String dateInString = "2016-09-18T12:17:21.000Z";

那么,问题是如何用instantDateTimeFormatter解析日期?

共有1个答案

谢誉
2023-03-14

“问题”是毫秒前的冒号,这是非标准的(标准是小数点)。

要使其工作,必须为您的自定义格式生成自定义DateTimeFormatter:

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);

此代码的输出:

2016-09-18T12:17:21+03:00[Europe/Kiev]

如果您的datetime文字有一个点而不是最后一个冒号,事情会简单得多。

 类似资料: