Konverter mellom streng og tidsstempel

1. Oversikt

Tidsstempel er et av få eldre dato- og tidsobjekter i Java.

I denne opplæringen vil vi se hvordan man analyserer fra a String verdi til en Tidsstempel objekt og hvordan du formaterer en Tidsstempel motsette seg en String.

Og siden Tidsstempel er avhengig av et Java-proprietært format, får vi se hvordan vi effektivt kan tilpasse oss.

2. Analyser a String til en Tidsstempel

2.1. Standardformat

Den enkleste måten å analysere a String til en Tidsstempel er dets verdien av metode:

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

Og når vår String er i JDBC-tidsstempelformat - åååå-m [m] -d [d] tt: mm:ss[.f ...] - da er det ganske enkelt.

Vi kan tolke det mønsteret slik:

MønsterBeskrivelseEksempel
ååååRepresenterer året, og det er obligatorisk å ha fire sifre for det.2018
m [m]For månedskomponenten må vi ha ett eller to sifre (fra 1 til 12).1, 11
d [d]For verdien av dagen i måneden må vi ha ett eller to sifre (fra 1 til 31).7, 12
hhStår for timen på dagen, med tillatte verdier fra 0 til 23.01, 16
mmStår i timens minutter, med tillatte verdier fra 0 til 59.02, 45
ssStår i sekunder i minuttet, med tillatte verdier fra 0 til 59.03, 52
[.f ...]Representerer valgfrie brøkdeler av et sekund, kan være opp til nanosekunders presisjon, slik at de tillatte verdiene er fra 0 til 999999999.12, 1567, 123456789

2.2. Alternative formater

Nå, hvis det ikke er i JDBC-tidsstempelformat, så heldigvis, verdien av tar også en LocalDateTime forekomst.

Dette betyr at vi kan ta en dato i hvilket som helst format, vi trenger bare å konvertere den til en LocalDateTime:

Strengmønster = "MMM dd, åååå HH: mm: ss.SSSSSSSS"; String timestampAsString = "12. nov. 2018 13: 02: 56.12345678"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern (mønster); LocalDateTime localDateTime = LocalDateTime.from (formatter.parse (tidsstempelAsString));

Og så kan vi bruke verdien av vi gjorde før:

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

Merk i forbifarten at, i motsetning til en Dato objekt, a Tidsstempel objektet er i stand til å lagre brøkdeler av et sekund.

3. Formater a Tidsstempel som en String

For å formatere en Tidsstempel, vil vi ha samme utfordring siden standardformatet er det proprietære JDBC-tidsstempelformatet:

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

Men igjen, ved hjelp av en mellomliggende konvertering, kan vi formatere den resulterende String til et annet dato- og tidsmønster, som ISO-8601-standarden:

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", tidsstempelAsString);

4. Konklusjon

I denne artikkelen så vi hvordan vi konverterer mellom String og Tidsstempel objekter i Java. Vi så også hvordan du bruker LocalDateTime konvertering som et mellomledd trinn for å konvertere til og fra forskjellige dato- og tidsmønstre.

Og sørg for å finne alle disse eksemplene og utdragene på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found