Zum einen ist dieser Wert ein LocalDateTime
, nicht ein LocalDate
. Wenn Sie am Ende ein Datum bekommen möchten, würde ich es zuerst in ein LocalDateTime
umwandeln, dann nehmen Sie den Datumsteil davon.
Lesen Sie die Dokumentation bei der Formatierung und Analyse des Datums immer sorgfältig durch.. Es sieht so aus, als ob Sie Joda Time verwenden (aufgrund der Verwendung von forPattern
; wenn Sie zu Java 8 wechseln können, wäre das vorteilhaft). Das bedeutet, dass Sie die DateTimeFormat
docs lesen sollten.
Aktuelle Probleme mit Ihrem Muster:
- Sie mit 'D' anstelle von 'd'; das bedeutet, Tag-of-Jahres-
- Du hast ‚T‘ angegeben, ohne sie zu zitieren, und es ist nicht in dem Muster ohnehin
- Sie den Anteil-of-zweiten Teil Ihres Wertes ignoriert hat
- Sie haben 'zz' angegeben, wenn in dem Wert kein Zeitzonenindikator vorhanden ist.
Hier ist ein funktionierendes Beispiel:
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) {
String text = "2016-07-05 02:14:35.0";
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
LocalDateTime localDateTime = LocalDateTime.parse(text, format);
System.out.println(localDateTime);
}
}
Wenn Sie tatsächlich Werte analysieren wollen mit T
in der Mitte, dann würden Sie ein Muster von "yyyy-MM-dd'T'HH:mm:ss.S"
verwenden - beachten Sie, wie dann die T
so zitiert Es wird buchstäblich als Formatbezeichner behandelt.
Beachten Sie, dass dies nur Parsing ist. Es ist nicht "eine Zeichenfolge in ISO-Datumsformat konvertieren" - es wandelt eine Zeichenfolge in eine LocalDateTime
. Wenn Sie dann Format diesen Wert in einem ISO-Format möchten, müssen Sie DateTimeFormatter.print
mit einem geeigneten Format verwenden.Zum Beispiel möchten Sie vielleicht in ein Format von yyyy-MM-dd'T'HH:mm:ss.S
‚konvertieren:
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) {
String text = "2016-07-05 02:14:35.0";
DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
LocalDateTime localDateTime = LocalDateTime.parse(text, parser);
DateTimeFormatter printer = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.S");
String formatted = printer.print(localDateTime);
System.out.println(formatted); // Output 2016-07-05T02:14:35.0
}
}
Der obige Code nur eine einzelne Ziffer Bruch-of-Sekunden behandelt. Sie könnten mit .SSS
anstelle von .S
analysieren, aber Sie müssen wirklich herausfinden, was die Ausgabe in verschiedenen Fällen sein soll (z. B. für 100 Millisekunden, wollen Sie .1 oder .100?).
Siehe auch: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_INSTANT. Wenn das nicht hilft, ändern Sie das Muster in 'YYYY-MM-DD'THH: mm: sszzz' – shachar
Überlegen Sie das Problem? '" 2016-07-05 02: 14: 35.0 ".replace (" "," T ")' –