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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2400955/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 07:04:21  来源:igfitidea点击:

How to store Java Date to Mysql datetime with JPA

javamysqldatetimejpa

提问by Urvish

Can any body tell me how can I store Java Date to Mysql datetime...?

任何人都可以告诉我如何将 Java 日期存储到 Mysql 日期时间...?

When I am trying to do so...only date is stored and time remain 00:00:00 in Mysql date stores like this...

当我尝试这样做时......在Mysql日期存储中只存储日期并且时间保持00:00:00这样......

2009-09-22 00:00:00

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

我不仅要日期,还要时间……就像

2009-09-22 08:08:11

I am using JPA(Hibernate) with spring mydomain classes uses java.util.Date but i have created tables using handwritten queries...

我正在使用 JPA(Hibernate) 和 spring mydomain 类使用 java.util.Date 但我使用手写查询创建了表......

this is my create statement

这是我的创建语句

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;

采纳答案by Haim Evgi

see in the link :

见链接:

http://www.coderanch.com/t/304851/JDBC/java/Java-date-MySQL-date-conversion

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

This 'currentTime' was inserted into the column whose type was DateTime and it was successful.

此“ currentTime”已插入到类型为 DateTime 的列中,并且成功。

回答by Michael Borgwardt

Are you perhaps using java.sql.Date? While that has millisecond granularity as a Java class (it is a subclass of java.util.Date, bad design decision), it will be interpreted by the JDBC driver as a date without a time component. You have to use java.sql.Timestampinstead.

你也许正在使用java.sql.Date?虽然它作为 Java 类具有毫秒级粒度(它是 的子类java.util.Date,糟糕的设计决策),但它会被 JDBC 驱动程序解释为没有时间组件的日期。你必须java.sql.Timestamp改用。

回答by Marcx

Probably because your java date has a different format from mysql format(YYYY-MM-DD HH:MM:SS)

可能是因为您的 java 日期格式与mysql format( YYYY-MM-DD HH:MM:SS)不同

do this

做这个

 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
 Date date = new Date();
 System.out.println(dateFormat.format(date));

回答by Pascal Thivent

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

使用 注释您的字段(或 getter)@Temporal(TemporalType.TIMESTAMP),如下所示:

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

That should do the trick.

这应该够了吧。

回答by Anuj

you will get 2011-07-18 + time format

你会得到 2011-07-18 + 时间格式

long timeNow = Calendar.getInstance().getTimeInMillis();
java.sql.Timestamp ts = new java.sql.Timestamp(timeNow);
...
preparedStatement.setTimestamp(TIME_COL_INDEX, ts);

回答by Nikopol

mysql datetime -> GregorianCalendar

mysql 日期时间 -> 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

GregorianCalendar -> mysql 日期时间

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String string = format.format(calendar.getTime());
System.out.println(string);

回答by michdraft

java.util.Date date = new Date();
Object param = new java.sql.Timestamp(date.getTime());    
preparedStatement.setObject(param);

回答by Yang_2333

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.

使用以下代码将日期插入 MySQL。我们可以通过设置STR_TO_DATE(?, '%l:%i %p')参数来帮助数据库识别我们的日期,而不是更改我们的日期格式以满足 MySql 的要求。

For example, 2014-03-12 can be represented as STR_TO_DATE('2014-03-12', '%Y-%m-%d')

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

回答by Miguel Alonso Mosquera Aguilar

it works for me !!

这个对我有用 !!

in mysql table

在mysql表中

DATETIME

in entity:

在实体中:

private Date startDate;

in process:

进行中:

objectEntity.setStartDate(new Date());

in preparedStatement:

在preparedStatement中:

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

回答by Sahin Yanl?k

Actually you may not use SimpleDateFormat, you can use something like this;

其实你可能不会使用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.

这样您就可以直接获取指定格式的日期。