解析所有 ISO 8601 日期时间格式 Java 1.8

我在我的项目中使用 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 时间转换器的帖子,但我无法用它解析日期 2018-10-31T08:27:00.0000000Z。


慕码人8056858
浏览 170回答 1
1回答

慕婉清6462132

这可能会为您解决或至少是一个开始:    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:002018-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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java