1 回答
TA贡献1804条经验 获得超2个赞
这可能会为您解决或至少是一个开始:
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,否则看起来就在这里,需要 UTC 偏移量中的冒号,如+01:00. 相反,我使用格式模式XX。它接受不带冒号的偏移量,也接受Z你的第二个例子。如果还需要更多的灵活性,您可以查看格式化程序中的可选部分。检查文档。
乔达时间?使用 Java 8 时不推荐使用。 Joda-Time 主页上的一些引用:
Joda-Time 是Java SE 8 之前的 Java事实标准日期和时间库。现在要求用户迁移到java.time (JSR-310)。
请注意,Joda-Time 被认为是一个很大程度上“已完成”的项目。没有计划进行重大改进。如果使用 Java SE 8,请迁移到java.time(JSR-310)。
即使在 Java 6 和 7 上,我也会推荐 java.time 的反向移植而不是 Joda-Time。
添加回答
举报