我正在尝试使用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
。