1. Información general
La marca de tiempo es uno de los pocos objetos de fecha y hora heredados en Java.
En este tutorial, veremos cómo analizar de un valor de cadena a un objeto de marca de tiempo y cómo formatear un objeto de marca de tiempo a una cadena.
Y dado que Timestamp se basa en un formato propietario de Java, veremos cómo adaptarnos de manera efectiva.
2. Analizar una cadena en una marca de tiempo
2.1. Formato estandar
La forma más sencilla de analizar una cadena en una marca de tiempo es su método valueOf :
Timestamp.valueOf("2018-11-12 01:02:03.123456789")
Y cuando nuestra Cadena está en formato de marca de tiempo JDBC - aaaa-m [m] -d [d] hh: mm : ss [.f…] - entonces es bastante simple.
Podemos interpretar ese patrón así:
Patrón | Descripción | Ejemplo |
---|---|---|
aaaa | Representa el año y es obligatorio tener cuatro dígitos. | 2018 |
m [m] | Para el componente del mes, debemos tener uno o dos dígitos (del 1 al 12). | 1, 11 |
d [d] | Para el valor del día del mes, debemos tener uno o dos dígitos (del 1 al 31). | 7, 12 |
S.S | Representa la hora del día, con valores permitidos de 0 a 23. | 01, 16 |
mm | Representa los minutos de la hora, con valores permitidos de 0 a 59. | 02, 45 |
ss | Representa segundos en el minuto, con valores permitidos de 0 a 59. | 03, 52 |
[.F…] | Representa fracciones opcionales de un segundo, puede tener una precisión de hasta nanosegundos, por lo que los valores permitidos son de 0 a 999999999. | 12, 1567, 123456789 |
2.2. Formatos alternativos
Ahora, si no está en formato de marca de tiempo JDBC, entonces, afortunadamente, valueOf también toma una instancia LocalDateTime .
Esto significa que podemos tomar una fecha en cualquier formato, solo necesitamos convertirla primero en LocalDateTime :
String pattern = "MMM dd, yyyy HH:mm:ss.SSSSSSSS"; String timestampAsString = "Nov 12, 2018 13:02:56.12345678"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); LocalDateTime localDateTime = LocalDateTime.from(formatter.parse(timestampAsString));
Y luego podemos usar valueOf que hicimos antes:
Timestamp timestamp = Timestamp.valueOf(localDateTime); assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());
Tenga en cuenta de paso que, a diferencia de un objeto Date , un objeto Timestamp es capaz de almacenar fracciones de segundo.
3. Dar formato a una marca de tiempo como una cadena
Para formatear una marca de tiempo , tendremos el mismo desafío, ya que su formato predeterminado es el formato de marca de tiempo propietario de JDBC:
assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());
Pero, nuevamente, usando una conversión intermedia, podemos formatear la Cadena resultante a un patrón de fecha y hora diferente, como el estándar ISO-8601:
Timestamp timestamp = Timestamp.valueOf("2018-12-12 01:02:03.123456789"); DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; String timestampAsString = formatter.format(timestamp.toLocalDateTime()); assertEquals("2018-12-12T01:02:03.123456789", timestampAsString);
4. Conclusión
En este artículo, vimos cómo convertir entre objetos String y Timestamp en Java. Además, vimos cómo usar la conversión LocalDateTime como un paso intermedio para convertir hacia y desde diferentes patrones de fecha y hora.
Y asegúrese de encontrar todos estos ejemplos y fragmentos en GitHub.