web-dev-qa-db-fra.com

Comprendre JodaTime DateTime.parse (chaîne, formateur)

Le style du formateur dans la méthode parse de la classe DateTime doit-il correspondre au style exact de la chaîne? Par exemple, j'obtiens un objet TimeStamp de la base de données (Oracle) et le convertis en chaîne. Dans la base de données, le TimeStamp est stocké comme ceci

08-AUG-12 12.00.00.000000000 AM

J'ai réglé mon formateur sur ce style

String pattern = "dd-MMM-yy";

Je reçois cette exception

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'est-ce que cela signifie exactement et comment pourrais-je y remédier? Lorsque je règle mon formateur sur "yy-MMM-dd hh.mm.ss aa" Je ne reçois pas d'exception mais il s'affiche dans le navigateur comme ceci: 2008-08-12T00:00:00.000-04:00, mais je dois l'imprimer en tant que "dd-MMM-yy hh:mm:ss aa"

18
Robert

Utilisez plutôt 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));

MODIFIER

En fait, vous pouvez aussi le faire avec 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");
}
52
Eugene

Deviner. Pour obtenir le format correct, vous devez appeler formatter.print (objet localDateTime) et cela a fonctionné.

2
Robert