如何使用 JPA 存储 Java 日期到 Mysql 日期时间

有人能告诉我如何将 Java Date 存储到 Mysql datetime... ?

当我试图这样做... 只有日期存储和时间保持00:00:00 in Mysql date stores like this...

2009-09-22 00:00:00

I want not only date but also time...like

2009-09-22 08:08:11

我使用 JPA (Hibernate)和 spring mydomain 类使用 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)
);
314294 次浏览

请参阅连结:

Http://www.coderanch.com/t/304851/jdbc/java/java-date-mysql-date-conversion

The following code just solved the problem:

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);

这个“ 现时时间”被插入到 DateTime 类型的列中,并且成功了。

你可能使用 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));

Annotate your field (or getter) with @Temporal(TemporalType.TIMESTAMP), like this:

public class MyEntity {
...
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date myDate;
...
}

这样应该可以了。

你会得到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);

Use the following code to insert the date into MySQL. Instead of changing our date's format to meet MySql's requirement, we can help data base to recognize our date by setting the STR_TO_DATE(?, '%l:%i %p') parameters.

例如,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'),?,?,?,?,?)");

it works for me !!

在 mysql 表中

DATETIME

实体:

private Date startDate;

过程中:

objectEntity.setStartDate(new Date());

声明:

pstm.setDate(9, new java.sql.Date(objEntity.getStartDate().getTime()));

实际上,您可能不会使用 SimpleDateFormat,您可以使用类似这样的东西;

  @JsonSerialize(using=JsonDateSerializer.class)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy HH:mm:ss")
private Date blkDate;

This way you can directly get the date with format as specified.

这个答案中非常简单的条件是 mysql 和 Column 数据类型为 datetime,你想把数据从 java 代码发送到 mysql:

Date dt = new java.util. Date () ;
whatever your code object may be.setDateTime(dt);

important thing is just pick the date and its format is already as per mysql format and send it, no further modifications required.

我还是喜欢用一行的方法

new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime())

如果使用 Java 8或以上,请尝试使用 本地日期时间。如果使用 日期时间作为 mysql 数据类型,那么这是正确的类型。

下面是将当前时间转换为“2009-09-2208:08:11”格式的示例

LocalDateTime currentTime = LocalDateTime.parse(LocalDateTime.now().toString(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));