Warum bekomme ich unparseable Datum Ausnahme?
Ich bin nicht in der Lage, um ein Datum zu analysieren mit SimpleDateFormat
. Ich habe versucht diesen code:
SimpleDateFormat fechas = new SimpleDateFormat("dd/MM/yyyy hh:mm");
if (data[i].length() > 1) {
Date f = (Date) fechas.parse(data[i]);
System.out.println(i + " " + f);
}
Bekomme ich die folgende Fehlermeldung:
Exception in thread "main" java.text.ParseException: Unparseable date: "01/06/2015 8:20
"
Habe ich das gleiche problem wieder, mit dem folgenden code:
SimpleDateFormat fech = new SimpleDateFormat(" yyyy/MM/dd HH:mm:ss");
Date date = (Date) fech.parse(data[i]);
System.out.println(date);
Gibt die den Fehler
Exception in thread "main" java.text.ParseException: Unparseable date: "00015/06/01 08:20:15"
Wie kann ich dieses problem beheben?
- Ihr date-Zeichenfolgen nicht übereinstimmen, Muster, genau wie die Fehlermeldung sagt.
- Nur eine Vermutung, aber... "01/06/2015" nicht enthalten "hh:mm" Teil. Und die 2. Sache hat a) zwei Leerzeichen in der Mitte und b) ein Jahr der "00015", die nicht Naht rechts.
- erste ist "00015/06/01 08:20:15" und der andere "01/06/2015 8:20:10"
- (
HH
= 24 Stundenhh
= 12 Stunden Bereich.) - FYI, ist die lästige alte Datum-Zeit-Klassen wie
java.util.Date
,java.util.Calendar
, undjava.text.SimpleDateFormat
sind jetzt legacy, überlagert von der java.Zeit Klassen gebaut in Java 8 und höher. Siehe Tutorial von Oracle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bei der Verwendung
SimpleDateFormat
, das Datum in das format passen genau. In deinem Beispiel, fügen Sie das Datum, aber in Ihrem Datum-format geben Sie auch die Stunden und Minuten. Wenn Sie Ihre Daten hatte, dass der text, es würde funktionieren. Zum Beispiel, mit Ihrem ersten Beispiel:Dieser Ausgänge:
tl;dr
Entsprechend Ihrer Formatierung Muster zu Ihrem Eingang.
java.Zeit
Als andere erklärte, Sie Ihre Formatierung Muster entspricht nicht Ihren string-input.
Zudem sind Sie mit lästigen alten Datum-Zeit-Klassen ersetzt wurde vor Jahren von der java.Zeit Klassen.
Ihre Zeit-von-Tag Stunde fehlt eine Polsterung null. So Sie haben sollten, wurde mit einer
h
eher als zweihh
. Außerdem, ein Kleinbuchstabeh
bedeutet 12-Stunden-Uhr, wo Ihr Eingang zu sein scheint, 24-Stunden-angesichts des Fehlens einer AM/PM-Anzeige. So ein groß -H
ist in Ordnung.Über java.Zeit
Den java.Zeit framework ist in Java 8 und höher. Diese Klassen verdrängen die lästige alte legacy Datum-Zeit-Klassen wie
java.util.Date
,Calendar
, &" = SimpleDateFormat
.Den Joda-Time Projekt, jetzt in Wartung-Modus, rät der migration auf die java.Zeit Klassen.
Um mehr zu erfahren, siehe die Oracle Tutorial. Und die Suche Stack Overflow für viele Beispiele und Erklärungen. Spezifikation JSR 310.
Können Sie exchange java.Zeit Objekte direkt mit Ihrer Datenbank. Verwenden Sie eine JDBC-Treiber kompatibel mit JDBC 4.2 oder später. Keine Notwendigkeit für Streicher, keine Notwendigkeit für
java.sql.*
Klassen.Wo erhalten Sie die java.Zeit-Klassen?
Den ThreeTen-Extra Projekt erweitert die java.mal mit zusätzlicher Klassen. Dieses Projekt ist ein Testgelände für mögliche künftige Erweiterungen zu java.Zeit. Sie finden möglicherweise einige nützliche Klassen, die hier wie
Interval
,YearWeek
,YearQuarter
, und mehr.Muster in Ihrem Datum
String
sowie inSimpleDateFormat()
sollten übereinstimmen :-SimpleDateFormat("dd/MM/yyyy hh:mm")
arbeiten mit01/06/2015 2:24
UND
SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
arbeiten mit2015/06/01 08:20:15
Für die vollständige Liste finden Sie unter Offizielle Oracle Doc hier
Ich mache das gerne, dass der Quellcode