Joda时间 - 解析字符串抛出java.lang.IllegalArgumentException

Sér*_*els 10 java jodatime date-parsing date-formatting

不应该String使用特定的格式化DateTimeFormatter进行解析LocalDateTime.parse()吗?

测试

DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis()
LocalDateTime ldt = new LocalDateTime()
String val = ldt.toString(formatter)
System.out.println(val) //2013-03-26T13:10:46
// parse() throws java.lang.IllegalArgumentException: Invalid format: "2013-03-26T13:10:46" is too short
LocalDateTime nldt = LocalDateTime.parse(val, formatter) 
Run Code Online (Sandbox Code Playgroud)

Mag*_*lex 8

看看JavaDoc:

返回一个基本格式化程序,它结合了一个没有毫秒的基本日期和时间,用'T'(yyyyMMdd'T'HHmmssZ)分隔.对于零,时区偏移为'Z',对于非零,时区偏移为'±HHmm'.默认情况下,解析器是严格的,因此无法解析时间字符串24:00.

这里的关键似乎是时区偏移是'Z'表示零,而形状'±HHmm'表示非零.Joda Time显然希望获得时区信息parse().

我附加"Z"到您解析的日期字符串,它更好地工作:

DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis();
LocalDateTime ldt = new LocalDateTime();
String val = ldt.toString(formatter);
System.out.println(val);    
val += "Z";
LocalDateTime nldt = LocalDateTime.parse(val, formatter);
System.out.println(nldt.toString());
Run Code Online (Sandbox Code Playgroud)

输出是:

2013-03-26T17:50:06
2013-03-26T17:50:06.000
Run Code Online (Sandbox Code Playgroud)