Понимание JodaTime DateTime.parse(строка, форматирование)

Соответствует ли стиль форматирования методу parse класса DateTime точному стилю строки? Например, я получаю объект TimeStamp из базы данных (Oracle) и преобразовываю его в строку. В базе данных TimeStamp хранится следующим образом:

08-AUG-12 12.00.00.000000000 AM

Я установил свой форматтер в этот стиль

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"

Ответы

Ответ 1

Вместо этого используйте 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");
}

Ответ 2

Выяснил это. Чтобы получить правильный формат, вам нужно вызвать formatter.print(объект localDateTime), и он сработал.