am在我的项目中使用spring boot和Java 1.8。我们正在从外部系统接收需要解析的日期字符串。问题是外部系统可以发送任何符合ISO 8601的DateTime,我们需要解析任何附带的ISO 8601格式的字符串。谁能建议我该怎么做?有没有这样做的图书馆?
传递的两种DateTime格式是2018-11-01T16:26:15 + 0100,2018-10-31T08:27:00.0000000Z并且可以有更多种。
我在StackOverflow上发现了一些建议使用Joda Time转换器的帖子,但是我无法以此解析日期2018-10-31T08:27:00.0000000Z。
答案 0 :(得分:3)
这可能为您解决,或者至少是一个开始:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.appendPattern("XX")
.toFormatter();
String[] stringsPassed = {
"2018-11-01T16:26:15+0100",
"2018-10-31T08:27:00.0000000Z"
};
for (String sample : stringsPassed) {
OffsetDateTime odt = OffsetDateTime.parse(sample, formatter);
System.out.println(odt);
}
输出:
2018-11-01T16:26:15+01:00 2018-10-31T08:27Z
它不会解析所有可考虑的ISO 8601字符串,但可以解析您可以获取的字符串。由于您只给我们看了两个样本,所以我不知道。
java.time,现代的Java日期和时间API,对ISO 8601非常友好。它处理秒的存在与否以及秒的分数(最多9位小数)。这就是我在代码中使用DateTimeFormatter.ISO_LOCAL_DATE_TIME
的目的。轻微的问题是,内置DateTimeFormatter.ISO_OFFSET_DATE_TIME
可能会出现在此处,但在+01:00
中,UTC偏移量需要一个冒号。相反,我使用的是格式模式XX
。如第二个示例所示,它接受不带冒号的偏移量,还接受Z
。如果还需要更大的灵活性,则可以查看格式化程序中的可选部分。检查文档。
Joda-Time吗??当您使用Java 8时,不建议使用。
Joda-Time是Java的 de facto 标准日期和时间库 Java SE 8之前的版本。现在要求用户迁移到
java.time
(JSR-310)。请注意,Joda-Time被认为是很大程度上“完成”的项目。 没有计划进行重大增强。如果使用Java SE 8,请迁移 到
java.time
(JSR-310)。
即使在Java 6和7上,我也会推荐通过Joda-Time进行java.time的反向移植。
java.time
。DateTimeFormatter
和DateTimeFormatterBuilder
的文档。