2016-03-25 14 views
3
間のあいまいさを持っ

私はHTMLながらjava.util.Dateとjava.sql.Date

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

の日付タグからの入力として日付を取得しようとすることによって、JSPページにアクセスしています

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

を使用していますが、文字列の形式で返し、私は今までの中でそれを変換したい、私は

SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd"); 
Date date = sdf.parse(strDate); 
を次のように試してみました

しかし、それはエラーに必要な

互換性のない型を与える:java.sql.Dateが見つかりましたjava.util.Date

と私はpakage "java.utilのを*。" インポートするときjava.util.Date date = sdf.parse(strDate);を使用するためのそれはjava.sqlの試合で、日に

参照があいまいなjava.utilのjava.util.Dateクラスとクラスjava.sql.Dateの両方を与える

+1

あなたはおそらくまだjava.sql.Date'をインポート '持っています。それを取り除くと、エラーは消えてしまいます。 – Brian

答えて

3

あなたはjava.sql.Date(および必要互換性のない型:java.sql.Dateが見つから:java.util.Dateはあなたが示して)を必要とする場合は、java.util.Dateのインポートを削除し、java.sql.Dateを構築するためにDateFormatによって返さjava.util.Dateを使用のようなもの

1

Answer by Elliott Frischが正しいです。より良い変換が推奨されているというコメントがあります。がある。より良い方法はまた、java.util.Datejava.sql.Dateを混同して元の問題を回避します。 Javaの8に、後に建て

java.time

java.timeフレームワークが下手に設計された面倒な古いjava.util.Date/.Calendarクラスとその親族に取って代わります。新しいクラスは、非常に成功したJoda-Timeフレームワークからインスピレーションを受けていますが、概念は同様ですが再設計されています。定義:JSR 310Oracle Tutorialを参照してください。プロジェクトThreeTen-Extraによって拡張されました。 ThreeTenABPプロジェクトでAndroidで使用するためにラップされているThreeTen-BackportプロジェクトによってJava 6 & 7にバックポートされました。

LocalDateクラスは、時間帯のないタイムゾーンのない日付のみの値を表します。

ISO 8601

あなたの入力文字列がISO 8601規格に準拠するために起こります。

この標準は、デフォルトでは、日付時刻文字列を解析/生成するためのjava.timeクラスで使用されます。したがって、書式設定パターンを指定する必要はありません。

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

SQLデータベース

最終的にはJDBCドライバが直接java.timeタイプを使用するように更新されます。これまでは、SQLデータベースを使って日時値を取得または送信する必要があるときは、java.time型とjava.sql型の間で変換を行いました。古いjava.sqlクラスには、このような変換のための新しいメソッドがあります。 LocalDateの場合は、java.sql.Dateクラスを使用します(これは日付のみの値です)。

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

...と他の方向に行く...

java.time.LocalDate localDate = mySqlDate.toLocalDate(); 
関連する問題