web-dev-qa-db-ja.com

文字列-> Java.util.Date-> Java.sql.Date(タイムスタンプ付き)

これが私の問題です:ユーザーに次のような日付を入力させます:2012-12-24(文字列)時間をその文字列に連結し、Java.util.Dateに変換します私のコードは次のようになります:

String tempstartdate = startdte;  //startdte is the string value from a txtfield
       tempstartdate += " 00:01:00";
       String tempenddate = startdte;
       tempenddate += " 23:59:59";

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");               
       Java.util.Date validstartdte = null;
        Java.util.Date validenddte = null;

validstartdte = df.parse(tempstartdate);  //validstartdte is a util.Date (and works)
validenddte = df.parse(tempenddate);

私の問題は、そのutil.Dateを取得して、それをsql.Dateにしたい場合です。

Java.sql.Date sqlstartDate = new Java.sql.Date(validstartdte.getTime());
Java.sql.Date sqlendDate = new Java.sql.Date(validenddte.getTime());

割り当てたタイムスタンプは表示されず、yyyy-MM-ddの形式(2012-12-23など)でのみ日付が返されます。

なぜ!?私はとてもイライラしています。
注:ブレークポイントを使用すると、sqlendDateを展開して、次を返すcdateという値があることに気付きました:2012-12-12T23:59:59.000-0500私がいるデータベース使用しているのはPostgreSQLです。

助けてください!大変感謝いたします。

9
akwarywo

Java.sql.Date時間がありません。

使用する Java.sql.Timestamp代わりに。

31
Felipe Fonseca

私はこの質問に答えるのが非常に遅いかもしれませんが、それは役に立つかもしれないと思います。

'Felipe Fonseca'で述べられているように、次のようにutildateをsqldateに変換しました。

_public static Java.sql.Timestamp convertToSqlDateTime(Date utilDate){
    return new Java.sql.Timestamp(utilDate.getTime());
}
_

通常、_Java.sql.Date_は日付値のみを返し、時刻は破棄されます。したがって、時間を取得するには、_Java.sql.TimeStamp_を使用する必要があります。

TimeStampミリ秒の時間値を使用してTimestampオブジェクトを作成します。整数秒は、基になる日付値に格納されます。分数秒は、Timestampオブジェクトのnanosフィールドに格納されます。

この目的のために、utilDate.getTime()を使用して、このDateオブジェクトで表される1970年1月1日00:00:00 GMT以降のミリ秒数を返します。

_Java.sql.Date_のみが必要な場合は、次のことができます。

_public static Java.sql.Date convertToSqlDate(Date utilDate){
    return new Java.sql.Date(utilDate.getTime());
}
_
2
Chandra Prakash

あなたがリストしたまさにその理由のために、私はJavaの標準のDateクラスの使用を完全に諦めました。

Joda Time をしばらく使っていて、ずっと簡単だとわかりました。

1
jwismar