Converti tra String e Timestamp

1. Panoramica

Timestamp è uno dei pochi oggetti data-ora legacy in Java.

In questo tutorial vedremo come analizzare da un valore String a un oggetto Timestamp e come formattare un oggetto Timestamp in una String.

E poiché Timestamp si basa su un formato proprietario di Java, vedremo come adattarlo in modo efficace.

2. Analizza una stringa in un timestamp

2.1. Formato standard

Il modo più semplice per analizzare una stringa in un Timestamp è il suo metodo valueOf :

Timestamp.valueOf("2018-11-12 01:02:03.123456789")

E quando la nostra stringa è in formato timestamp JDBC - aaaa-m [m] -d [d] hh: mm : ss [.f…] - allora è piuttosto semplice.

Possiamo interpretare quel modello in questo modo:

Modello Descrizione Esempio
yyyy Rappresenta l'anno ed è obbligatorio avere quattro cifre. 2018
m [m] Per la componente mese, dobbiamo avere una o due cifre (da 1 a 12). 1, 11
d [d] Per il valore del giorno del mese, dobbiamo avere una o due cifre (da 1 a 31). 7, 12
hh Sta per l'ora del giorno, con valori ammessi da 0 a 23. 01, 16
mm Sta per i minuti dell'ora, con valori ammessi da 0 a 59. 02, 45
ss Sta per secondi al minuto, con valori consentiti da 0 a 59. 03, 52
[.f ...] Rappresenta frazioni opzionali di secondo, può avere una precisione fino a nanosecondi, quindi i valori consentiti sono compresi tra 0 e 999999999. 12, 1567, 123456789

2.2. Formati alternativi

Ora, se non è nel formato timestamp JDBC, fortunatamente valueOf accetta anche un'istanza LocalDateTime .

Ciò significa che possiamo prendere una data in qualsiasi formato, dobbiamo solo convertirla prima in 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));

E poi possiamo usare valueOf che abbiamo fatto prima:

Timestamp timestamp = Timestamp.valueOf(localDateTime); assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());

Nota di passaggio che, a differenza di un oggetto Date , un oggetto Timestamp è in grado di memorizzare frazioni di secondo.

3. Formattare un Timestamp come una stringa

Per formattare un timestamp , avremo la stessa sfida poiché il suo formato predefinito è il formato di timestamp JDBC proprietario:

assertEquals("2018-11-12 13:02:56.12345678", timestamp.toString());

Ma, ancora una volta, utilizzando una conversione intermedia, possiamo formattare la stringa risultante in un modello di data e ora diverso, come lo standard 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. Conclusione

In questo articolo, abbiamo visto come convertire tra oggetti String e Timestamp in Java. Inoltre, abbiamo visto come utilizzare la conversione LocalDateTime come passaggio intermedio per convertire in e da diversi modelli di data e ora.

E assicurati di trovare tutti questi esempi e snippet su GitHub.