Joda time - Parsing string throws java.lang.IllegalArgumentException
Sollte nicht ein String
formatiert mit einer bestimmten DateTimeFormatter
in der Lage sein, um analysiert zu werden mit LocalDateTime.parse()
?
Test
DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis()
LocalDateTime ldt = new LocalDateTime()
String val = ldt.toString(formatter)
System.out.println(val) //2013-03-26T13:10:46
//parse() throws java.lang.IllegalArgumentException: Invalid format: "2013-03-26T13:10:46" is too short
LocalDateTime nldt = LocalDateTime.parse(val, formatter)
Ich würde sagen, das ist ein bug mit JodaTime. Es sollte analysieren eine beliebige Zeichenfolge mit dem format sowie formatter-Objekt von DateTimeFormatter-das ist nicht passiert.
InformationsquelleAutor Sérgio Michels | 2013-03-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie einen Blick auf die JavaDoc:
Hier der Schlüssel zu sein scheint Die time zone offset " Z " für zero, und von der form '±HHmm " für nicht-null. Joda Zeit offensichtlich erwartet, Zeitzonen-Informationen für
parse()
.Ich angehängt
"Z"
zu Ihrer analysiert den Datums-String und es funktioniert besser:Ausgabe:
InformationsquelleAutor Magnilex
Dem formatter auch den Fehler auslöst, wenn
formatter.parseLocalDateTime(val)
genannt wird, ist das, wasLocalDateTime.parse(...)
ruft direkt (dh, das naiv nennen).So, dann, es ist ein Faktor, der das format aus, das zu erwarten ist - in diesem Fall ist
yyyy-MM-dd'T'HH:mm:ssZZ
; im Grunde, es beschwert sich, dass Sie nicht bestanden haben eine Zeitzone.Ich weiß nicht, ob diese wirklich qualifiziert sich als ein 'Fehler'; in der kurzen Frist, offensichtlich ein benutzerdefiniertes format kann verwendet werden, oder schauen Sie auf ISODateTimeFormat.localDateOptionalTimeParser(), die zu sein scheint, was Sie wollen (es ist das Standard-parser verwendet
LocalDateTime
).InformationsquelleAutor Clockwork-Muse