formato entre ejemplo diferencia create java date datetime timestamp

entre - Java: Convertir cadenas en TimeStamp



hibernate date format (8)

Tengo un problema mientras trato de convertir un String en un TimeStamp. Tengo una matriz que tiene la fecha en el formato de yyyy-MM-dd y quiero cambiar en el formato de yyyy-MM-dd HH:mm:ss.SSS . Entonces, uso este código:

final String OLD_FORMAT = "yyyy-MM-dd"; final String NEW_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS"; String oldDateString = createdArray[k]; String newDateString; DateFormat formatter = new SimpleDateFormat(OLD_FORMAT); Date d = formatter.parse(oldDateString); ((SimpleDateFormat) formatter).applyPattern(NEW_FORMAT); newDateString = formatter.format(d); System.out.println(newDateString); Timestamp ts = Timestamp.valueOf(newDateString); System.out.println(ts);

y obtengo el siguiente resultado.

2009-10-20 00: 00: 00.000

2009-10-20 00: 00: 00.0

pero cuando intento simplemente hacer

String text = "2011-10-02 18:48:05.123"; ts = Timestamp.valueOf(text); System.out.println(ts);

Obtengo el resultado correcto:

2011-10-02 18: 48: 05.123

¿Sabes lo que podría estar haciendo mal? Gracias por la ayuda.


Estoy seguro de que la solución es que su oldDateString es algo así como "2009-10-20". Obviamente, esto no contiene datos de tiempo inferiores a días. Si formatea esta cadena con su nuevo formateador, ¿de dónde debería sacar los minutos, segundos y milisegundos?

El resultado es absolutamente correcto: 2009-10-20 00: 00: 00.000

Lo que necesitará para resolver esto es la marca de tiempo original (incluidos los datos de tiempo) antes de su primer formateo.


Me gustaría contribuir con la respuesta moderna. Cuando se formuló esta pregunta en 2013, el uso de la clase Timestamp fue correcto, por ejemplo, para almacenar una fecha y hora en su base de datos. Hoy la clase está muy desactualizada. La moderna API de fecha y hora de Java salió con Java 8 en la primavera de 2014, hace tres años y medio. Recomiendo que uses esto en su lugar.

Dependiendo de su situación y de los requisitos exactos, hay dos reemplazos naturales para Timestamp :

  • Instant es un punto en la línea de tiempo. Para la mayoría de los propósitos, consideraría más seguro usar esto. Un Instant es independiente de la zona horaria y generalmente funcionará bien incluso en situaciones donde su dispositivo cliente y su servidor de base de datos ejecutan diferentes zonas horarias.
  • LocalDateTime es una fecha y hora del día sin zona horaria, como 2011-10-02 18: 48: 05.123 (para citar la pregunta).

Un controlador JDBC moderno (JDBC 4.2 o superior) y otras herramientas modernas para el acceso a la base de datos estarán encantados de almacenar un Instant o LocalDateTime en la columna de la base de datos de la timestamp de timestamp del tipo de datos. Ambas clases y las otras clases de fecha y hora que estoy usando en esta respuesta pertenecen a la API moderna conocida como java.time o JSR-310.

Es más fácil convertir la cadena a LocalDateTime , así que vamos a tomar eso primero:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSS"); String text = "2011-10-02 18:48:05.123"; LocalDateTime dateTime = LocalDateTime.parse(text, formatter); System.out.println(dateTime);

Esto imprime

2011-10-02T18:48:05.123

Si su cadena estaba en formato aaaa-MM-dd, en su lugar, haga lo siguiente:

String text = "2009-10-20"; LocalDateTime dateTime = LocalDate.parse(text).atStartOfDay(); System.out.println(dateTime);

Esto imprime

2009-10-20T00:00

O aún mejor, tome el resultado de LocalDate.parse() y guárdelo en una columna de base de datos con la date del tipo de datos.

En ambos casos, el procedimiento para convertir de LocalDateTime a Instant es:

Instant ts = dateTime.atZone(ZoneId.systemDefault()).toInstant(); System.out.println(ts);

He especificado una conversión utilizando el huso horario predeterminado de la JVM porque esto es lo que la clase obsoleta habría usado. Sin embargo, esto es frágil, ya que la configuración de la zona horaria puede cambiarse bajo nuestros pies por otras partes de su programa o por otros programas que se ejecutan en la misma JVM. Si puede, especifique una zona horaria en el formato de región / ciudad , por ejemplo:

Instant ts = dateTime.atZone(ZoneId.of("Europe/Athens")).toInstant();


Siga estos pasos para obtener un resultado correcto:

try { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS"); Date parsedDate = dateFormat.parse(yourString); Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime()); } catch(Exception e) { //this generic but you can control another types of exception // look the origin of excption }

Tenga en cuenta que .parse(String) podría lanzar una ParseException .


primero convierta su cadena de date hasta la date luego conviértala en timestamp de timestamp usando el siguiente conjunto de líneas

Date date=new Date(); Timestamp timestamp = new Timestamp(date.getTime());//instead of date put your converted date Timestamp myTimeStamp= timestamp;


puedes intentarlo una vez ...

String dob="your date String"; String dobis=null; final DateFormat df = new SimpleDateFormat("yyyy-MMM-dd"); final Calendar c = Calendar.getInstance(); try { if(dob!=null && !dob.isEmpty() && dob != "") { c.setTime(df.parse(dob)); int month=c.get(Calendar.MONTH); month=month+1; dobis=c.get(Calendar.YEAR)+"-"+month+"-"+c.get(Calendar.DAY_OF_MONTH); } }


DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); Date date = formatter.parse(dateString); Timestamp timestamp = new Timestamp(date.getTime()); System.out.println(timestamp);


DateFormat formatter; formatter = new SimpleDateFormat("dd/MM/yyyy"); Date date = (Date) formatter.parse(str_date); java.sql.Timestamp timeStampDate = new Timestamp(date.getTime());


import java.sql.Timestamp; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Util{ public static Timestamp convertStringToTimestamp(String str_date) { try { DateFormat formatter; formatter = new SimpleDateFormat("dd/MM/yyyy"); // you can change format of date Date date = formatter.parse(str_date); java.sql.Timestamp timeStampDate = new Timestamp(date.getTime()); return timeStampDate; } catch (ParseException e) { System.out.println("Exception :" + e); return null; } } }