"=SimpleDateFormat Herstellung Falsches Datum Zeit beim Parsen "YYYY-MM-dd HH:mm"
Ich versuche zu analysieren, eine String
(YYYY-MM-dd HH:mm
) zu Date
jedoch immer ein Falsches Datum als erwartet.
CODE:
Date newDate = null;
String dateTime = "2013-03-18 08:30";
SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-dd HH:mm", Locale.ENGLISH);
df.setLenient(false);
try {
newDate = df.parse(dateTime);
} catch (ParseException e) {
throw new InvalidInputException("Invalid date input.");
}
Produziert:
Sun Dec 30 08:30:00 EST 2012 (falsch)
Ich habe versucht, Nachsichtig off, aber kein Glück.
Update
Dank Sudhanshu für die Antwort, es hat mir geholfen, zu lösen, Java-Konvertierung. Wenn ich das zurückgegebene Datum von den oben genannten code in der Datenbank, erhalte ich das Datum richtig, aber die Zeit ist immer 00:00
.
ps.setDate(3, new java.sql.Date(app.getDate().getTime()));
- Für das update
java.sql.Date
ist für ein Datum nur, bedeutete für den date-Datentyp von SQL. Aus der Dokumentation: “übereinstimmung mit der definition des SQL-DATUM, die Millisekunden-Werte umhüllt von einem java.sql.Date-Instanz muss 'normalisiert', durch die Einstellung der Stunden, Minuten, Sekunden und Millisekunden auf null in der bestimmten Zeit-zone, mit der die Instanz zugeordnet ist."
Du musst angemeldet sein, um einen Kommentar abzugeben.
YYYY sollte JJJJ-
Bitte überprüfen Sie in der Dokumentation " = SimpleDateFormat hier
Java 6 : http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
Java 7 : http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
Kleine Fall Y, nicht caps. ie yyyy nicht YYYY
Überprüfen Sie die Kommentare hier: Java-Einfache Datums-Format und andere Antworten referenziert.
Gibt es zwei problem.
"yyyy-MM-dd HH:mm"
.TimeStamp
und nichtDate
in der Datenbank.Korrigieren sowohl die Dinge, und Sie werden in der Lage sein, zu speichern und abrufen von Datum mit Uhrzeit.
Hier ist die moderne Antwort. Die anderen Antworten waren gut Antworten, als Sie geschrieben wurden, im Jahr 2013. Das Jahr nach, dass die moderne date und time API-kam als Ersatz für die alten Klassen
Date
,SimpleDateFormat
und Freunde. IMHO sollten Sie die neuen Klassen jetzt. Sie sind viel mehr Programmierer freundlich.Außer für die Klasse Namen, es ist gar nicht so Verschieden von der alten code. Mit anderen Beispielen gibt es Unterschiede, in der Regel die modernen Klassen werden für klareren code und weniger Möglichkeiten für Fehler.
Nur für eine kleine demonstration von einem Unterschied, wir versuchen, format-Muster-string, den Sie hatte mit Großbuchstaben
YYYY
es:Nun der code wirft einen
java.time.format.DateTimeParseException: Text '2013-03-18 08:30' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {MonthOfYear=3, DayOfMonth=18, WeekBasedYear[WeekFields[SUNDAY,1]]=2013},ISO resolved to 08:30 of type java.time.format.Parsed
. Es ist lang, ich weiß. Die Sache zu beachten ist, dass es kein Jahr unter die Felder, die Sie erwähnt, nur eine WeekBasedYear. Es ist nicht das gleiche; und Sie haben herausgefunden, dass dies nun genau das ist, denn GroßbuchstabenY
ist für die Woche-basierte Jahr (nur usseful mit einer Nummer der Woche), wo Sie verwenden sollten, Kleinbuchstabeny
für Jahr. Ich halte dieses Verhalten ein wenig mehr als hilfreich, was die alten Klassen haben: Sie Gaben Ihnen ein Ergebnis, das falsch war, Tat alles in Ordnung war und verließ Sie völlig im Dunkeln darüber, was falsch war.Nächsten ich verstehe, dass Sie wollen, speichern Sie Ihre Datum und Uhrzeit in eine Datenbank. In den alten Tagen, Sie würde konvertieren, um einige geeignete
java.sql
geben. Nicht mehr erforderlich ist. Ich glaube, mit einer 4.2 JDBC-Treiber, die Sie tun können:Habe ich nicht getestet, diese mit einer Datenbank, obwohl. Beachten Sie, dass Sie verwenden
setObject()
stattsetDate()
.