关于java:了解JodaTime DateTime.parse(string,formatter)

Understanding JodaTime DateTime.parse(string, formatter)

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

08-AUG-12 12.00.00.000000000 AM

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

1
String pattern ="dd-MMM-yy";

我得到这个例外

1
2
3
4
5
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)

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


使用LocalDateTime代替:

1
2
3
4
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));

编辑

事实上,您也可以使用DateTime来执行此操作:

1
2
3
4
5
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");
}


弄清楚了。 为了获得正确的格式,您必须调用formatter.print(localDateTime对象)并且它可以工作。