Java DateをMysql datetimeに保存する方法を教えてください。
私がそうしようとすると...日付のみが保存され、時刻はこのようなMysqlの日付ストアに00:00:00のままです...
2009-09-22 00:00:00
日付だけでなく時間も欲しい
2009-09-22 08:08:11
私は春のmydomainクラスでJPA(Hibernate)を使用していますが、Java.util.Dateを使用していますが、手書きのクエリを使用してテーブルを作成しました...
これは私の作成ステートメントです
CREATE TABLE ContactUs (id BIGINT auto_increment,
userName VARCHAR(30),
email VARCHAR(50),
subject VARCHAR(100),
message VARCHAR(1024),
messageType VARCHAR(15),
contactUsTime datetime,
primary key(id))
TYPE=InnoDB;
リンクを参照してください:
http://www.coderanch.com/t/304851/JDBC/Java/Java-date-MySQL-date-conversion
次のコードはちょうど問題を解決しました:
Java.util.Date dt = new Java.util.Date();
Java.text.SimpleDateFormat sdf =
new Java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = sdf.format(dt);
この 'currentTime'は、型がDateTimeの列に挿入され、成功しました。
次のように、@Temporal(TemporalType.TIMESTAMP)
を使用してフィールド(またはゲッター)に注釈を付けます。
public class MyEntity {
...
@Temporal(TemporalType.TIMESTAMP)
private Java.util.Date myDate;
...
}
これでうまくいくはずです。
おそらくJava.sql.Date
を使用していますか?それはJavaクラスとしてミリ秒の粒度を持ちますが(Java.util.Date
のサブクラスであり、設計上の決定が不適切です)、JDBCドライバーによって時間コンポーネントのない日付として解釈されます。代わりにJava.sql.Timestamp
を使用する必要があります。
おそらく、Javaの日付の形式が mysql format
(YYYY-MM-DD HH:MM:SS
)と異なるためです
これを行う
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));
あなたは2011-07-18 +時間形式を取得します
long timeNow = Calendar.getInstance().getTimeInMillis();
Java.sql.Timestamp ts = new Java.sql.Timestamp(timeNow);
...
preparedStatement.setTimestamp(TIME_COL_INDEX, ts);
mysql datetime-> GregorianCalendar
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = format.parse("2012-12-13 14:54:30"); // mysql datetime format
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
System.out.println(calendar.getTime());
GregorianCalendar-> mysql datetime
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String string = format.format(calendar.getTime());
System.out.println(string);
Java.util.Date date = new Date();
Object param = new Java.sql.Timestamp(date.getTime());
preparedStatement.setObject(param);
次のコードを使用して、日付をMySQLに挿入します。 MySqlの要件を満たすように日付の形式を変更する代わりに、STR_TO_DATE(?, '%l:%i %p')
パラメーターを設定することにより、データベースが日付を認識できるようにすることができます。
たとえば、2014-03-12はSTR_TO_DATE('2014-03-12', '%Y-%m-%d')
として表すことができます
preparedStatement = connect.prepareStatement("INSERT INTO test.msft VALUES (default, STR_TO_DATE( ?, '%m/%d/%Y'), STR_TO_DATE(?, '%l:%i %p'),?,?,?,?,?)");
この回答の条件は非常にシンプルですが、mysqlでは列のデータ型はdatetimeであり、Javaコードからmysqlにデータを送信します。
Java.util.Date dt = new Java.util.Date();whatever your code object may be
。setDateTime(dt);
重要なことは、日付を選択するだけで、その形式はすでにmysql形式に従っており、それを送信することであり、それ以上の変更は必要ありません。
私はまだ1行の方法を好む
new Java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime())
実際、SimpleDateFormatを使用しない場合がありますが、このようなものを使用できます。
@JsonSerialize(using=JsonDateSerializer.class)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy HH:mm:ss")
private Date blkDate;
これにより、指定した形式で日付を直接取得できます。