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ønster | Beskrivelse | Eksempel |
---|---|---|
åååå | 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 |
hh | Står for timen på dagen, med tillatte verdier fra 0 til 23. | 01, 16 |
mm | Står i timens minutter, med tillatte verdier fra 0 til 59. | 02, 45 |
ss | Stå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.