有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我在我的项目中使用SpringBoot和Java1.8。我们从外部系统接收到需要解析的日期字符串。问题是外部系统可以发送任何符合ISO 8601的日期时间,我们需要解析任何ISO 8601格式的字符串。谁能建议我怎么做?有这样做的图书馆吗

传递的两种日期时间格式是2018-11-01T16:26:15+0100、2018-10-31T08:27:00.0000000Z,还可以有更多

我在StackOverflow上找到了一些建议使用Joda时间转换器的帖子,但我无法用它来解析日期2018-10-31T08:27:00.0000000Z


共 (1) 个答案

  1. # 1 楼答案

    这可能会为您解决问题,或者至少是一个开始:

        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
    

    它不会解析所有thinkable ISO 8601字符串,但可能会解析您可以得到的字符串。因为你们只给我们看了两个样品,我不知道

    爪哇。现代Java日期和时间API time对ISO 8601非常友好。它处理秒的存在和不存在以及秒的分数(高达9位小数)。这就是我在代码中使用DateTimeFormatter.ISO_LOCAL_DATE_TIME的原因。一个小问题是,内置的DateTimeFormatter.ISO_OFFSET_DATE_TIME(在这里看起来就在这里)需要在UTC偏移量中使用冒号,如+01:00。相反,我使用的是格式模式XX。它接受不带冒号的偏移量,还接受Z,如第二个示例所示。如果还需要更大的灵活性,可以查看格式化程序中的可选部分。检查文档

    乔达时间使用Java 8时不建议使用。Joda Time主页上的几句话:

    Joda-Time is the de facto standard date and time library for Java prior to Java SE 8. Users are now asked to migrate to java.time (JSR-310).

    Note that Joda-Time is considered to be a largely “finished” project. No major enhancements are planned. If using Java SE 8, please migrate to java.time (JSR-310).

    即使在Java6和Java7上,我也会推荐Java的后端口。时间一次又一次

    链接