Java 8 Date and Time API - parse yyyy-MM-dd'T'HH:mm:ss.断续器

2022-09-03 07:06:14

我正在尝试以ISO8601格式解析日期:

yyyy-MM-dd'T'HH:mm:ss.断续器

我是否正确,无法使用java.time.format.DateTimeFormatter中定义的任何默认格式对其进行解析?

例如,ISO_OFFSET_DATE_TIME将仅解析:

yyyy-MM-dd'T'HH:mm:ss.断续器

样品:

yyyy-MM-dd'T'HH:mm:ss.SSSZ
2015-04-29T10:15:00.500+0000

yyyy-MM-dd'T'HH:mm:ss.SSSZZ
2015-04-29T10:15:00.500+00:00

顺便说一句:I知道我可以定义自己的格式化程序,这不是问题所在。只是想确保我不会错过一些东西,因为JodaISODateTimeFormat能够解析两者:

 org.joda.time.format.DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime();
 DateTime dateTime = dateTimeFormatter.parseDateTime("2015-04-29T10:15:00.500+0000");

答案 1

我不确定这是你期望的答案。

方法 1

使用即时解析

Instant.parse("2015-06-28T10:13:14.743Z");

方法 2

给定的输入格式等效于从给定模式 y-MM-dd'T'HH:mm:ss 中删除 “Z” 后的ISO_DATE_TIME格式。断续器

然后,我们可以使用ISO_DATE_TIME

 text = "2015-06-28T10:13:14.743"
 LocalDateTime.parse(text,DateTimeFormatter.ISO_DATE_TIME)

答案 2

你永远不应该被那些烦人的日期格式所困扰。

有一个新的库日期解析器

它可以自动识别任何字符串,并将其正确解析为日期日历LocalDateTimeOffsetDateTime

有了它,您不必准备任何适当的模式,例如 或 :yyyy-MM-dd'T'HH:mm:ss.SSSZyyyy-MM-dd'T'HH:mm:ss.SSSZZ

Date date = DateParserUtils.parseDate("2015-04-29T10:15:00.500+0000");
Calendar calendar = DateParserUtils.parseCalendar("2015-04-29T10:15:00.500Z");
LocalDateTime dateTime = DateParserUtils.parseDateTime("2015-04-29 10:15:00.500 +00:00");

一切都很好,请享受它。


推荐