Java 8 日期和时间 API - 解析 yyyy-MM-dd'T'HH:mm:ss.SSSZ
Java 8 Date and Time API - parse yyyy-MM-dd'T'HH:mm:ss.SSSZ
我正在尝试解析 ISO8601 格式的日期:
yyyy-MM-dd'T'HH:mm:ss.SSSZ
我是否正确,无法使用 java.time.format.DateTimeFormatter 中定义的任何默认格式对其进行解析?
例如 ISO_OFFSET_DATE_TIME 将只解析:
yyyy-MM-dd'T'HH:mm:ss.SSSZZ
样本:
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
顺便说一句:我知道我可以定义我自己的格式化程序,这不是问题。只是想确保我没有遗漏某些东西,因为 Joda 的 ISODateTimeFormat 能够解析两者:
org.joda.time.format.DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime();
DateTime dateTime = dateTimeFormatter.parseDateTime("2015-04-29T10:15:00.500+0000");
你是对的,这似乎与任何默认格式都不匹配,因此你需要使用 java.time.format.DateTimeFormatterBuilder
.
构建你的格式
Joda 使用 ISO8601 格式作为默认的 ISODateTimeFormat。因此,根据文档 http://www.w3.org/TR/NOTE-datetime,Joda 将无法解析您的格式。
我不确定这是您期望的答案。
方法一
使用 Instant 解析
Instant.parse("2015-06-28T10:13:14.743Z");
方法二
给定的输入格式等同于ISO_DATE_TIME格式
从给定模式 yyyy-MM-dd'T'HH:mm:ss.SSSZ
中删除 'Z' 后
然后我们可以使用ISO_DATE_TIME
解析它
text = "2015-06-28T10:13:14.743"
LocalDateTime.parse(text,DateTimeFormatter.ISO_DATE_TIME)
你永远不应该被那些烦人的日期格式所困扰。
有一个新图书馆 dateparser。
它可以自动识别任何String,并将其解析为Date、Calendar、 LocalDateTime、OffsetDateTime 正确。
有了它,您不必准备任何适当的模式,如 yyyy-MM-dd'T'HH:mm:ss.SSSZ
或 yyyy-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");
一切正常,请欣赏。
我正在尝试解析 ISO8601 格式的日期:
yyyy-MM-dd'T'HH:mm:ss.SSSZ
我是否正确,无法使用 java.time.format.DateTimeFormatter 中定义的任何默认格式对其进行解析?
例如 ISO_OFFSET_DATE_TIME 将只解析:
yyyy-MM-dd'T'HH:mm:ss.SSSZZ
样本:
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
顺便说一句:我知道我可以定义我自己的格式化程序,这不是问题。只是想确保我没有遗漏某些东西,因为 Joda 的 ISODateTimeFormat 能够解析两者:
org.joda.time.format.DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTime();
DateTime dateTime = dateTimeFormatter.parseDateTime("2015-04-29T10:15:00.500+0000");
你是对的,这似乎与任何默认格式都不匹配,因此你需要使用 java.time.format.DateTimeFormatterBuilder
.
Joda 使用 ISO8601 格式作为默认的 ISODateTimeFormat。因此,根据文档 http://www.w3.org/TR/NOTE-datetime,Joda 将无法解析您的格式。
我不确定这是您期望的答案。
方法一
使用 Instant 解析
Instant.parse("2015-06-28T10:13:14.743Z");
方法二
给定的输入格式等同于ISO_DATE_TIME格式 从给定模式 yyyy-MM-dd'T'HH:mm:ss.SSSZ
中删除 'Z' 后然后我们可以使用ISO_DATE_TIME
解析它 text = "2015-06-28T10:13:14.743"
LocalDateTime.parse(text,DateTimeFormatter.ISO_DATE_TIME)
你永远不应该被那些烦人的日期格式所困扰。
有一个新图书馆 dateparser。
它可以自动识别任何String,并将其解析为Date、Calendar、 LocalDateTime、OffsetDateTime 正确。
有了它,您不必准备任何适当的模式,如 yyyy-MM-dd'T'HH:mm:ss.SSSZ
或 yyyy-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");
一切正常,请欣赏。