2016-03-25 14 views
3

Ich versuche Datum als Eingabe von Datum-Tag von HTMLWährend String to Date Umwandlung bekam Mehrdeutigkeit zwischen java.util.Date und java.sql.Date

Birth Date <input type="date" name="dob"/>

und den Zugriff auf jsp Seite zu erhalten, indem mit

String strDate = request.getParameter("dob"); 

aber es gibt im Format-String und ich wollte es in bisher konvertieren, habe ich versucht, als

SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd"); 
Date date = sdf.parse(strDate); 
folgt

Aber es gibt Fehler

inkompatible Typen erforderlich: java.sql.Date gefunden: java.util.Date

und wenn ich importierte pakage "java.util. *" Für die Verwendung von java.util.Date date = sdf.parse(strDate); es gibt

Bezug auf Datum nicht eindeutig ist,

beiden Klassen java.util.Date in java.util und Klasse java.sql.Date in java.sql Spiel
+1

Sie haben wahrscheinlich noch 'java.sql.Date' importiert. Entfernen Sie es und der Fehler verschwindet. – Brian

Antwort

3

Wenn Sie ein java.sql.Date benötigen (und inkompatible Typen erforderlich: java.sql.Date gefunden: java.util.Date zeigt an Dich), den Import von java.util.Date entfernen und die java.util.Date vom DateFormat zurück verwenden, um ein java.sql.Date zu konstruieren mit so etwas wie

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
try { 
    Date date = new Date(sdf.parse(strDate).getTime()); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 
1

Die Answer by Elliott Frisch ist richtig. Ein Kommentar wurde gefragt, ob eine bessere Konvertierung empfohlen wird. Es gibt. Der bessere Weg vermeidet auch das ursprüngliche Problem, verwirrend java.util.Date mit java.sql.Date.

java.time

Der java.time Rahmen eingebaut in Java 8 und verdrängt später die schlecht gestalteten lästigen alten java.util.Date/.Calendar Klassen und ihre Angehörigen. Die neuen Klassen sind von dem sehr erfolgreichen Joda-Time Framework inspiriert, das konzeptionell ähnlich ist, aber neu gestaltet wurde. Definiert von JSR 310. Siehe die Oracle Tutorial. Erweitert um das Projekt ThreeTen-Extra. Back-portiert auf Java 6 & 7 durch das Projekt ThreeTen-Backport, das für die Verwendung in Android durch das Projekt ThreeTenABP gewickelt ist.

Die Klasse LocalDate repräsentiert einen Nur-Datum-Wert ohne Uhrzeit und ohne Zeitzone.

ISO 8601

Ihr Eingabestring geschieht mit dem ISO 8601-Standard entspricht.

Dieser Standard wird standardmäßig in den Klassen java.time zum Analysieren/Generieren von Strings für Datum und Uhrzeit verwendet. Sie müssen also kein Formatierungsmuster angeben.

LocalDate localDate = LocalDate.parse("2016-01-23"); 

SQL-Datenbank

Schließlich JDBC-Treiber werden direkt aktualisiert werden, um java.time Typen zu verwenden. Bis dahin, wenn Sie Datum-Uhrzeit-Werte mit einer SQL-Datenbank abrufen oder senden müssen, konvertieren Sie zwischen den Typen java.time und java.sql. Die alten java.sql-Klassen haben neue Methoden für solche Konvertierungen. Verwenden Sie für LocalDate die java.sql.Date Klasse (die vorgibt, ein Nur-Datum-Wert zu sein).

java.sql.Date mySqlDate = java.sql.Date.valueOf(localDate); 

... und gehen in die andere Richtung ...

java.time.LocalDate localDate = mySqlDate.toLocalDate();