2 回答
![?](http://img1.sycdn.imooc.com/545868190001d52602200220-100-100.jpg)
TA贡献1890条经验 获得超9个赞
AnOffsetDateTime需要一个时间,但是您的格式字符串不提供该时间,因此您需要DateTimeFormatter将默认时间设置为午夜。
此外,偏移量+3:00无效,因为小时必须为2位数,这意味着您需要先对其进行修复。
这将同时做到:
public static OffsetDateTime parse(String text) {
// Fix 1-digit offset hour
String s = text.replaceFirst("( [+-])(\\d:\\d\\d)$", "$10$2");
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("uuuu-MM-dd xxx")
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.toFormatter();
return OffsetDateTime.parse(s, formatter);
}
测试
System.out.println(parse("2018-07-22 +3:00"));
System.out.println(parse("2018-07-22 +03:00"));
System.out.println(parse("2007-07-21 +00:00"));
输出
2018-07-22T00:00+03:00
2018-07-22T00:00+03:00
2007-07-21T00:00Z
添加回答
举报