2012-08-28 18 views
15

¿El estilo del formateador en el método parse de la clase DateTime tiene que coincidir con el estilo exacto de la cadena? Por ejemplo, obtengo un objeto TimeStamp de la base de datos (Oracle) y lo convierto en una cadena. En la base de datos de la marca de hora se almacena como estoDescripción de JodaTime DateTime.parse (cadena, formateador)

08-ago-12 12.00.00.000000000 AM

puse mi formateador para este estilo

String pattern = "dd-MMM-yy"; 

me sale esta excepción

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) 

¿Qué significa exactamente esto y cómo voy a solucionarlo? Cuando me puse mi formateador a "yy-MMM-dd hh.mm.ss aa" no consigo una excepción pero se imprime en el navegador de la siguiente manera: 2008-08-12T00:00:00.000-04:00, pero necesito para que se imprima como "dd-MMM-yy hh:mm:ss aa"

Respuesta

40

Uso LocalDateTime lugar:

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

EDITAR

Como cuestión de hecho, usted puede hacerlo con DateTime también:

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

cuando uso 'localDateTime.toString();' todavía se imprime como lo indiqué en el mensaje original. – Robert

+0

@Robert demasiado tarde para el comentario, supongo :) lo resolvió usted mismo. – Eugene

+0

TYhanks para la dirección – Robert

2

Lo descubrí. Para obtener el formato correcto, debe llamar a formatter.print (localDateTime object) y funcionó.

+2

también puede especificar el patrón a usar en el toString .. localDateTime.toString ("dd-MMM-aa hh: mm: ss aa"); – Eugene

+0

Aún mejor :-) – Robert