2012-08-28 10 views
15

Czy styl formatyzatora w metodzie DateTime parse musi być zgodny z dokładnym stylem ciągu? Na przykład, otrzymuję obiekt TimeStamp z bazy danych (Oracle) i konwertuję go na ciąg znaków. W bazie danych timestamp jest przechowywana takZrozumienie JodaTime DateTime.parse (ciąg, formatowanie)

08-AUG-12 12.00.00.000000000 AM

mogę ustawić formatowania do tego stylu

String pattern = "dd-MMM-yy"; 

otrzymuję ten wyjątek

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) 

Co to dokładnie oznacza i jak mogę to naprawić? Kiedy mogę ustawić formatowania do "yy-MMM-dd hh.mm.ss aa" Nie rozumiem wyjątek ale drukuje w przeglądarce tak: 2008-08-12T00:00:00.000-04:00, ale muszę na to, aby wydrukować jako "dd-MMM-yy hh:mm:ss aa"

Odpowiedz

40

Korzystanie LocalDateTime zamiast:

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

EDIT

w gruncie rzeczy można zrobić z DateTime również:

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"); 
} 
+0

kiedy używam 'localDateTime.toString();' nadal drukuje jak wskazałem w oryginalnej wiadomości. – Robert

+0

@Robert za późno na komentarz chyba ... sam to rozwiązałeś. – Eugene

+0

Tyhanks dla kierunku – Robert

2

Wyliczyłem to. Aby uzyskać poprawny format, musisz wywołać formatter.print (obiekt localDateTime) i zadziałało.

+2

możesz również określić wzorzec do użycia w toString .. localDateTime.toString ("dd-MMM-yy gg: mm: ss aa"); – Eugene

+0

Jeszcze lepiej :-) – Robert

Powiązane problemy