2010-03-08 34 views
83

¿Puede alguien decirme cómo puedo almacenar la fecha de Java en Mysql datetime ...?¿Cómo almacenar la fecha Java en Mysql datetime ...?

Cuando estoy tratando de hacerlo ... única fecha y hora se almacena permanecen 00:00:00 en MySQL fecha tiendas como esta ...

2009-09-22 00:00:00 

Quiero no sólo la fecha, sino también el tiempo ... como

2009-09-22 08:08:11 

estoy usando JPA (Hibernate) con las clases de primavera mydomain utiliza java.util.Date pero tengo tablas creadas mediante consultas escritas a mano ...

esta es mi creación declaración

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; 
+0

piezas de su código, tal vez? – Bozho

+1

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

+1

En estos días ya no debe utilizar 'java.util.Date' en absoluto (en 2010 probablemente no hubo mejor opción). Es mejor utilizar las clases modernas, como 'java.time.Instant' o' java.time.LocalDateTime', dependiendo de los requisitos exactos para la fecha y hora que necesita almacenar. –

Respuesta

139

ver en el enlace:

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

El siguiente código acabamos de resolver el problema:

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

Este 'horaActual' se insertó en la columna cuyo tipo de fue DateTime y fue exitoso.

+7

1 por salvar mi día! : D – Swayam

+3

pero, horaActual es un objeto String, y en dB tomamos como tipo de datos de fecha y hora, creo que no va a ser inserted.right? – reddy

+1

¡De hecho! Entonces, ¿cómo se hace esto? – yaylitzis

33

¿Está utilizando quizás java.sql.Date? Si bien eso tiene una granularidad de milisegundos como una clase de Java (es una subclase de java.util.Date, mala decisión de diseño), el controlador JDBC lo interpretará como una fecha sin un componente de tiempo. Tienes que usar java.sql.Timestamp en su lugar.

+4

1 para "Usted tiene que usar java.sql.Timestamp" –

+0

yo no usaría '' java.sql.Date' o java.sql.Timestamp' en clases de dominio, pero supongo que esto fue escrito antes de la edición de la OP. –

+0

Yo lo haría. Los objetos java.util.Date no se pueden comparar con los objetos java.sql.Timestamp con resultados totalmente predecibles. –

7

Probablemente porque su fecha de Java tiene un formato diferente de mysql format (YYYY-MM-DD HH:MM:SS)

hacer esto

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

Anote en su campo (o captador) con @Temporal(TemporalType.TIMESTAMP), así:

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

Eso debería hacer el truco.

+7

Esta es la respuesta correcta. Debería tener más votos! – Niles11

+2

¡Esta es la respuesta! – Perneel

+2

para esto, esta es la respuesta correcta. – Ryan

5

obtendrá 2011-07-18 + tiempo de formato

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

MySQL de fecha y hora -> 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 fecha y hora

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
String string = format.format(calendar.getTime()); 
System.out.println(string); 
2
java.util.Date date = new Date(); 
Object param = new java.sql.Timestamp(date.getTime());  
preparedStatement.setObject(param); 
0

Uso el siguiente código para insertar la fecha en MySQL. En lugar de cambiar el formato de nuestra fecha para cumplir con los requisitos de MySql, podemos ayudar a la base de datos a reconocer nuestra fecha estableciendo los parámetros STR_TO_DATE(?, '%l:%i %p').

Por ejemplo, 12.03.2014 se puede representar como 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'),?,?,?,?,?)"); 
-2

funciona para mí !!

en la tabla mysql

DATETIME 

en la entidad:

private Date startDate; 

en proceso:

objectEntity.setStartDate(new Date()); 

en PreparedStatement:

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

En realidad, no puedes usar SimpleDateFormat, puedes usar algo como esto;

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

De esta manera puede obtener directamente la fecha con el formato especificado.

0

Es muy simple aunque las condiciones en este tópico están en el tipo de datos MySQL columna de fecha y hora es y que desea enviar los datos de código Java para MySQL:

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

Lo importante es marcar la fecha y su formato ya está de acuerdo con el formato MySQL y enviarlo, sin más modificaciones requeridas.

Cuestiones relacionadas