Java - 将字符串转换为ISO 8601日期格式错误Joda-Time

时间:2014-02-01 23:42:12

标签: java jodatime

我正在尝试使用ISO 8601将我的应用用户输入的日期转换为Joda-Time格式,因此我使用以下代码但出现错误:

String oldDate = "05/05/2013";
DateTime oldD = DateTime.parse(oldDate);
DateTimeFormatter OldDFmt = ISODateTimeFormat.dateTime();
String str = OldDFmt.print(oldD);
System.out.println(str);

但我总是收到错误:

  

org.springframework.web.util.NestedServletException:Request   处理失败;嵌套异常是   java.lang.IllegalArgumentException:格式无效:“05/05/2013”​​是   在“/ 05/2013”​​中表示不正确

有人可以帮忙告诉我这里做错了什么吗?感谢。

2 个答案:

答案 0 :(得分:5)

  

有人可以帮忙告诉我这里的错误吗?

此处发生错误。

DateTime oldD = DateTime.parse(oldDate);

DateTime.parse(String)方法使用String解析您的ISODateTimeFormat.dateTimeParser()参数。

format must be of the form

 datetime          = time | date-opt-time
 time              = 'T' time-element [offset]
 date-opt-time     = date-element ['T' [time-element] [offset]]
 date-element      = std-date-element | ord-date-element | week-date-element
 std-date-element  = yyyy ['-' MM ['-' dd]]
 ord-date-element  = yyyy ['-' DDD]
 week-date-element = xxxx '-W' ww ['-' e]
 time-element      = HH [minute-element] | [fraction]
 minute-element    = ':' mm [second-element] | [fraction]
 second-element    = ':' ss [fraction]
 fraction          = ('.' | ',') digit+
 offset            = 'Z' | (('+' | '-') HH [':' mm [':' ss [('.' | ',') SSS]]])

你的

String oldDate = "05/05/2013";

不是

您需要使用具有相应格式的解析器解析您的String日期,例如Paul Hicks建议的内容。然后,您可以将创建的DateTime格式化为ISO标准格式。

答案 1 :(得分:4)

您用于解析字符串DateTime.parse(oldDate)的格式化程序是默认格式化程序:根据javadocs ISODateTimeFormat.dateTimeParser()。您需要一个能够了解字符串格式DateTimeFormatter的解析dd/mm/yyyy。我不使用joda-time,但我认为你想要这个:

DateTimeFormatter stringParser = DateTimeFormat.forPattern("dd/MM/yyyy");

其余代码看起来不错。