入力として Java.util.Date
を使用してからそれを使用してクエリを作成しようとしているため、 Java.sql.Date
が必要です。
暗黙的にも明示的にも変換できないことに驚きました - しかし、Java APIはまだかなり新しいので、どのようにしてこれを行うのかもわかりません。
Java.util.DateをJava.sql.Dateに変換する方法は?
しないでください。両方のクラスは時代遅れです。
Java.util.Date
およびJava.sql.Date
の代わりに Java.time クラスを使用します。PreparedStatement
NAME_ を使用したクエリの例。
myPreparedStatement.setObject(
… , // Specify the ordinal number of which argument in SQL statement.
myJavaUtilDate.toInstant() // Convert from legacy class `Java.util.Date` (a moment in UTC) to a modern `Java.time.Instant` (a moment in UTC).
.atZone( ZoneId.of( "Africa/Tunis" ) ) // Adjust from UTC to a particular time zone, to determine a date. Instantiating a `ZonedDateTime`.
.toLocalDate() // Extract a date-only `Java.time.LocalDate` object from the date-time `ZonedDateTime` object.
)
代替品:
Instant
NAME_ の代わりにJava.util.Date
LocalDate
NAME_ の代わりにJava.sql.Date
日付のみの値(時刻なし、タイムゾーンなし)を使用する場合は、 Java.util.Date
ではなく、 LocalDate
NAME_ クラスを使用します。
Java8以降では、Javaの初期バージョンにバンドルされていた面倒な古い日時クラスは、新しい Java.timeパッケージ に取って代わられました。 Oracleチュートリアル を参照してください。機能の多くは、 ThreeTen-Backport のJava6および7にバックポートされ、さらに ThreeTenABP のAndroidに適合しました。
SQLデータ型DATE
name__は、日付のみであり、時刻とタイムゾーンがないことを意味します。 JavaJavaの Java.time.LocalDate
まで正確にそのようなクラスはありませんでした8.特定のタイムゾーンに従って今日の日付を取得してそのような値を作成しましょう(タイムゾーンは重要です)たとえば、パリではモントリオールよりも早く新しい日が明けると日付を決定します)。
LocalDate todayLocalDate = LocalDate.now( ZoneId.of( "America/Montreal" ) ); // Use proper "continent/region" time zone names; never use 3-4 letter codes like "EST" or "IST".
この時点で、完了です。 JDBCドライバー が JDBC 4.2仕様 に準拠している場合、 LocalDate
NAME_ で setObject
NAME_ を介してPreparedStatement
name__を渡して、SQL DATEフィールドに格納できる必要があります。
myPreparedStatement.setObject( 1 , localDate );
同様に、 ResultSet::getObject
を使用して、SQL DATE列からJavaLocalDate
name__オブジェクトにフェッチします。 2番目の引数でクラスを指定すると、コードは type-safe になります。
LocalDate localDate = ResultSet.getObject( 1 , LocalDate.class );
つまり、この質問全体はJDBC 4.2では無関係ですまたはそれ以降。
JDBCドライバーがこの方法で実行されない場合、Java.sql型への変換にフォールバックする必要があります。
変換するには、古い日時クラスに追加された新しいメソッドを使用します。 Java.sql.Date.valueOf(…)
を呼び出して、LocalDate
name__を変換できます。
Java.sql.Date sqlDate = Java.sql.Date.valueOf( todayLocalDate );
そして、他の方向に向かっています。
LocalDate localDate = sqlDate.toLocalDate();
Java.util.Date
からの変換古いdate-timeクラスの使用を避ける必要がありますが、既存のコードを使用する場合は強制される場合があります。その場合、Java.timeとの間で変換できます。
UTCのタイムライン上の瞬間を表すInstant
name__クラスを調べます。 Instant
name__は、Java.util.Date
と考え方が似ています。ただし、Instant
name__の解像度は ナノ秒 までですが、Java.util.Date
の解像度は ミリ秒 のみです。
変換するには、古いクラスに追加された新しいメソッドを使用します。たとえば、 Java.util.Date.from( Instant )
および Java.util.Date::toInstant
。
Instant instant = myUtilDate.toInstant();
日付を決定するには、タイムゾーンのコンテキストが必要です。任意の瞬間について、日付はタイムゾーンによって世界中で異なります。 ZoneId
NAME_ を取得するには、 ZonedDateTime
NAME_ を適用します。
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
LocalDate localDate = zdt.toLocalDate();
†Java.sql.Dateクラスは、時刻のない日付のみのふりをしますが、実際には深夜に調整された時刻を dos します。紛らわしい?はい、古い日時クラスは混乱しています。
Java.time フレームワークは、Java8以降に組み込まれています。これらのクラスは、 Java.util.Date
、 Calendar
NAME_ 、& SimpleDateFormat
NAME_ などの厄介な古い legacy 日時クラスに取って代わります。
Joda-Time プロジェクトは、現在 メンテナンスモード であり、 Java.time クラスへの移行を推奨しています。
詳細については、 Oracle Tutorial を参照してください。また、Stack Overflowで多くの例と説明を検索してください。仕様は JSR 31 です。
Java.timeオブジェクトをデータベースと直接交換できます。 JDBC 4.2 以降に準拠する JDBCドライバー を使用します。文字列もJava.sql.*
クラスも必要ありません。
Java.timeクラスはどこで入手できますか?
ThreeTen-Extra プロジェクトは、追加のクラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性のある証明の場です。 Interval
NAME_ 、 YearWeek
NAME_ 、 YearQuarter
NAME_ 、 more などの便利なクラスがあります。
気にしないで....
public class MainClass {
public static void main(String[] args) {
Java.util.Date utilDate = new Java.util.Date();
Java.sql.Date sqlDate = new Java.sql.Date(utilDate.getTime());
System.out.println("utilDate:" + utilDate);
System.out.println("sqlDate:" + sqlDate);
}
}
それを説明します。リンクは です。http://www.Java2s.com/Tutorial/Java/0040__Data-Type/ConvertfromajavautilDateObjecttoajavasqlDateObject.htm
他の答えでは時間情報に問題があるかもしれません(日付を予期しない結果と比較してください!)
私は提案します:
Java.util.Calendar cal = Calendar.getInstance();
Java.util.Date utilDate = new Java.util.Date(); // your util date
cal.setTime(utilDate);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Java.sql.Date sqlDate = new Java.sql.Date(cal.getTime().getTime()); // your sql date
System.out.println("utilDate:" + utilDate);
System.out.println("sqlDate:" + sqlDate);
この関数は、Javaの日付オブジェクトから変換されたSQLの日付を返します。
public Java.sql.Date convertJavaDateToSqlDate(Java.util.Date date) {
return new Java.sql.Date(date.getTime());
}
Java.util.Data
をJava.sql.Data
に変換することは、時、分、秒を失います。それでそれが可能であるならば、私はあなたがこのようにJava.sql.Timestamp
を使うことを勧めます:
prepareStatement.setTimestamp(1, new Timestamp(utilDate.getTime()));
詳細については、 この質問 を確認してください。
JXDatePicker(Java calender)から日付を選び、それをSQLのDate型としてデータベースに格納するという私の場合、以下はうまくいきます。
Java.sql.Date date = new Java.sql.Date(pickedDate.getDate().getTime());
pickedDateはJXDatePickerのオブジェクトです。
この関数は、Javaの日付オブジェクトから変換されたSQLの日付を返します。
public static Java.sql.Date convertFromJAVADateToSQLDate(
Java.util.Date javaDate) {
Java.sql.Date sqlDate = null;
if (javaDate != null) {
sqlDate = new Date(javaDate.getTime());
}
return sqlDate;
}
最初にJava.util.Dateをフォーマットしてください。それから、フォーマットされた日付を使ってJava.sql.Dateの日付を取得します。
Java.util.Date utilDate = "Your date"
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
final String stringDate= dateFormat.format(utilDate);
final Java.sql.Date sqlDate= Java.sql.Date.valueOf(stringDate);
ここでUtil DateをSql dateとyaに変換する例これは私が私のプロジェクトで使っているものの一例です。
Java.util.Date utilStartDate = table_Login.getDob();(orwhat ever date your give form obj)
Java.sql.Date sqlStartDate = new Java.sql.Date(utilStartDate.getTime());(converting date)
私は初心者です。考えが役に立つかもしれません
String bufDt = bDOB.getText(); //data from form
DateFormat dF = new SimpleDateFormat("dd-MM-yyyy"); //data in form is in this format
Date bbdt = (Date)dF.parse(bufDt); // string data is converted into Java util date
DateFormat dsF = new SimpleDateFormat("yyyy-MM-dd"); //converted date is reformatted for conversion to sql.date
String ndt = dsF.format(bbdt); // Java util date is converted to compatible Java sql date
Java.sql.Date sqlDate= Java.sql.Date.valueOf(ndt); // finally data from the form is convered to Java sql. date for placing in database
2つの日付を比較する方法(util.dateまたはsql.date)
public static boolean isSameDay(Date a, Date b) {
Calendar calA = new GregorianCalendar();
calA.setTime(a);
Calendar calB = new GregorianCalendar();
calB.setTime(b);
final int yearA = calA.get(Calendar.YEAR);
final int monthA = calA.get(Calendar.MONTH);
final int dayA = calA.get(Calendar.DAY_OF_YEAR);
final int yearB = calB.get(Calendar.YEAR);
final int monthB = calB.get(Calendar.MONTH);
final int dayB = calB.get(Calendar.DAY_OF_YEAR);
return yearA == yearB && monthA == monthB && dayA == dayB;
}
Java.sql.Date sqlDate = new Java.sql.Date(javaDate.getTime());
ここで、javaDateはJava.util.Dateのインスタンスです
これでやってみる
public static String toMysqlDateStr(Date date) {
String dateForMySql = "";
if (date == null) {
dateForMySql = null;
} else {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateForMySql = sdf.format(date);
}
return dateForMySql;
}