DateTimeFormatter解析所有ISO有效的区域偏移样式

时间:2019-04-23 08:56:17

标签: java java-time

使用以下格式化程序,我可以解析"2017-03-28T23:40:06.000+0100"

new DateTimeFormatterBuilder()
            .append(ISO_LOCAL_DATE_TIME)
            .appendPattern("X")
            .toFormatter();

与另一个解析"2017-03-28T23:40:06.000+01:00"

new DateTimeFormatterBuilder()
            .append(ISO_LOCAL_DATE_TIME)
            .appendPattern("XX")
            .toFormatter();

但是,我无法指定同时解析两者的格式化程序。我应该附加什么模式?

Formatter还应该能够处理没有区域偏移的时间戳,例如"2017-03-28T23:40:06.000Z"

3 个答案:

答案 0 :(得分:1)

由于DateTimeFormatterBuilder的行为类似于流畅的界面,因此最简单的方法是同时添加两种模式:

new DateTimeFormatterBuilder()
        .append(ISO_LOCAL_DATE_TIME)
        .appendPattern("X")
        .appendPattern("XX")
        .toFormatter();

答案 1 :(得分:1)

以下内容开始为我服务

new DateTimeFormatterBuilder()
            .append(ISO_LOCAL_DATE_TIME)
            .optionalStart()
            .appendPattern("[XXX][X]")
            .toFormatter();

答案 2 :(得分:0)

我曾经有一个任务,如果字符串代表一个有效的Date且事先不知道其格式,则将String解析为Date。基本上,我需要格式化任何可能格式的字符串。我想到了一个想法,您可以将希望支持的所有数据格式写入文件,然后逐一读取格式,并尝试解析该格式的字符串,直到成功或用尽格式为止。这里是文章的链接,其中更详细地描述了这个想法:Java 8 java.time package: parsing any string to date