理解JodaTime DateTime.parse(string,formatter)

Rob*_*ert 18 java formatting datetime jodatime

DateTime类的parse方法中格式化程序的样式是否必须与字符串的确切样式匹配?例如,我从数据库(Oracle)获取TimeStamp对象并将其转换为字符串.在数据库中,TimeStamp就像这样存储

08-AUG-12 12.00.00.000000000 AM

我将格式化程序设置为此样式

String pattern = "dd-MMM-yy";
Run Code Online (Sandbox Code Playgroud)

我得到了这个例外

java.lang.IllegalArgumentException: Invalid format: "08-AUG-12 12.00.00 AM" is malformed at " 12.00.00 AM"

org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:866)

org.joda.time.DateTime.parse(DateTime.java:144)
Run Code Online (Sandbox Code Playgroud)

这究竟是什么意思,我将如何解决它?当我设置我的格式化程序时, "yy-MMM-dd hh.mm.ss aa"我没有得到异常,但它在浏览器中打印如下: 2008-08-12T00:00:00.000-04:00,但我需要将其打印为"dd-MMM-yy hh:mm:ss aa"

Eug*_*ene 52

改为使用LocalDateTime:

String input = "08-AUG-12 12.00.00 AM";
String pattern = "dd-MMM-yy hh.mm.ss aa";

LocalDateTime localDateTime = LocalDateTime.parse(input, DateTimeFormat.forPattern(pattern));
Run Code Online (Sandbox Code Playgroud)

编辑

事实上你也可以使用DateTime来做到这一点:

private static String parseDateTime(String input){
     String pattern = "dd-MMM-yy hh.mm.ss aa";
     DateTime dateTime  = DateTime.parse(input, DateTimeFormat.forPattern(pattern));
     return dateTime.toString("dd-MMM-yy hh:mm:ss aa");
}
Run Code Online (Sandbox Code Playgroud)