19

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

12 年 8 月 8 日 12.00.00.000000000 上午

我将格式化程序设置为这种样式

String pattern = "dd-MMM-yy";

我得到了这个例外

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"

4

2 回答 2

54

改用 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));

编辑

事实上,您也可以使用 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");
}
于 2012-08-28T20:55:29.947 回答
2

弄清楚了。要获得正确的格式,您必须调用 formatter.print(localDateTime object) 并且它有效。

于 2012-08-28T21:48:25.243 回答