web-dev-qa-db-ja.com

Java.sql.Date形式で現在の日付を取得します

JDBC呼び出しの準備済みステートメントに現在の日付を追加する必要があります。 yyyy/MM/ddのような形式で日付を追加する必要があります。

やってみた

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date date = new Date();
pstm.setDate(6, (Java.sql.Date) date);

しかし、私はこのエラーがあります:

threw exception
Java.lang.ClassCastException: Java.util.Date cannot be cast to Java.sql.Date

同じ形式でJava.sql.Dateオブジェクトを取得する方法はありますか?

46
giozh

Java.util.DateJava.sql.Dateではありません。それは逆です。 Java.sql.DateJava.util.Dateです。

Java.sql.Dateが提供できる コンストラクターlongを取る を使用して、Java.util.Dateに変換する必要があります。

Java.sql.Date sqlDate = new Java.sql.Date(utilDate.getTime());
72
rgettman

単純に1行で:

Java.sql.Date date = new Java.sql.Date(Calendar.getInstance().getTime().getTime());
32
kelevra88
new Java.sql.Date(Calendar.getInstance().getTimeInMillis());
16
Amala

これらはすべて長すぎます。

使用するだけ:

new Date(System.currentTimeMillis())
10
Ethan Conner

します:new Date(Instant.now().toEpochMilli())

2

tl; dr

myPreparedStatement.setObject(   // Directly exchange Java.time objects with database without the troublesome old Java.sql.* classes.
    … ,                                   
    LocalDate.parse(             // Parse string as a `LocalDate` date-only value.
        "2018-01-23"             // Input string that complies with standard ISO 8601 formatting.
    ) 
)

Java.time

最新のアプローチでは、Java.util.DateJava.sql.Dateなどの面倒な古いレガシークラスに取って代わるJava.timeクラスを使用します。

日付のみの値の場合は、LocalDateを使用します。 LocalDate クラスは、時刻およびタイムゾーンのない日付のみの値を表します。

Java.timeクラスは、文字列の解析/生成時に標準形式を使用します。したがって、フォーマットパターンを指定する必要はありません。

LocalDate ld = LocalDate.parse( input ) ;

JDBC 4.2 以降に準拠する JDBCドライバー を使用して、Java.timeオブジェクトをデータベースと直接交換できます。 Java.sql。*クラスの内外での変換について忘れることができます。

myPreparedStatement.setObject( … , ld ) ;

検索:

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

Java.timeについて

Java.time フレームワークは、Java 8以降に組み込まれています。これらのクラスは、 Java.util.DateCalendar 、および SimpleDateFormat などの厄介な古い レガシー 日時クラスに取って代わります。

メンテナンスモード になった Joda-Time プロジェクトは、 Java.time クラスへの移行を推奨しています。

詳細については、 Oracle Tutorial を参照してください。また、多くの例と説明についてはStack Overflowを検索してください。仕様は JSR 31 です。

Java.timeクラスはどこで入手できますか?

  • Java SE 8Java SE 9 、およびそれ以降
    • ビルトイン。
    • 実装がバンドルされた標準Java AP​​Iの一部。
    • Java 9は、いくつかのマイナーな機能と修正を追加します。
  • Java SE 6 および Java SE 7
    • Java.time機能の多くは、 ThreeTen-Backport のJava 6および7にバックポートされています。
  • Android
    • Androidの後のバージョンは、Java.timeクラスの実装をバンドルします。
    • 以前のAndroidの場合、 ThreeTenABP プロジェクトはThreeTen-Backport(上記)に適合します。 ThreeTenABPの使用方法… を参照してください。

ThreeTen-Extra プロジェクトは、追加のクラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性のある証明の場です。 IntervalYearWeekYearQuarter 、および more などの便利なクラスがあります。

1
Basil Bourque

あなたがしなければならないのはこれだけです

    Calendar currenttime = Calendar.getInstance();               //creates the Calendar object of the current time
    Date sqldate = new Date((currenttime.getTime()).getTime());  //creates the sql Date of the above created object
    pstm.setDate(6, (Java.sql.Date) date);              //assign it to the prepared statement (pstm in this case)
0
muhammed aslam

以下の方法で目標を達成できます:-

long millis=System.currentTimeMillis();  
Java.sql.Date date=new Java.sql.Date(millis);  

または

// create a Java calendar instance
Calendar calendar = Calendar.getInstance();

// get a Java date (Java.util.Date) from the Calendar instance.
// this Java date will represent the current date, or "now".
Java.util.Date currentDate = calendar.getTime();

// now, create a Java.sql.Date from the Java.util.Date
Java.sql.Date date = new Java.sql.Date(currentDate.getTime());
0
duggu