如何使用 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
How to store Java Date to Mysql datetime with JPA
提问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.Timestamp
instead.
你也许正在使用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.
这样您就可以直接获取指定格式的日期。