我正在尝试使用Java将给定的字符串解析为DateTime,因为该字符串的格式如下:
    YYYY-MM-DDTHH:mm:ss [.s +] Z
毫秒是可选的,可以是小数点后的任何数字。
怎么能简单地做到呢?

最佳答案

OffsetDateTime.parse()开箱即用。说我们有:

    String[] input = {
            "2017-03-07T16:06:13+01:00",
            "2017-03-07T16:06:13.1+01:00",
            "2017-03-07T16:06:13.22+01:00",
            "2017-03-07T16:06:13.333+01:00",
            "2017-03-07T16:06:13.4444+01:00",
            "2017-03-07T16:06:13.55555+01:00",
            "2017-03-07T16:06:13.666666+01:00",
            "2017-03-07T16:06:13.7777777+01:00",
            "2017-03-07T16:06:13.88888888+01:00",
            "2017-03-07T16:06:13.999999999+01:00"
    };

    for (String ips : input) {
        OffsetDateTime dt = OffsetDateTime.parse(ips);
        System.out.println(dt);
    }


打印:

2017-03-07T16:06:13+01:00
2017-03-07T16:06:13.100+01:00
2017-03-07T16:06:13.220+01:00
2017-03-07T16:06:13.333+01:00
2017-03-07T16:06:13.444400+01:00
2017-03-07T16:06:13.555550+01:00
2017-03-07T16:06:13.666666+01:00
2017-03-07T16:06:13.777777700+01:00
2017-03-07T16:06:13.888888880+01:00
2017-03-07T16:06:13.999999999+01:00


正如安德烈亚斯(Andreas)在his answer中指出的那样,OffsetDateTime.toString()会打印尽可能多的三位小数组,以实现完全准确性。您当然可以拥有格式,但是我认为这不是问题。

但是,如果尝试将其输入10个小数(或更多),则会得到DateTimeParseException

08-18 19:32