Понимание 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), и он сработал.