Konverter java.util.Date til String

1. Oversikt

I denne opplæringen viser vi hvordan vi kan konvertere Dato gjenstander til String objekter i Java. For å gjøre det, jobber vi med de eldre java.util.Date type så vel som med det nye Dato tid API introdusert i Java 8.

Hvis du vil lære hvordan du gjør den motsatte konverteringen, dvs. fra String til Dato typer, kan du sjekke ut denne opplæringen her.

For mer informasjon om nye Dato tid API, se denne relaterte opplæringen.

2. Konvertering java.util.Date til String

Selv om vi ikke skal bruke java.util.Date hvis vi jobber med Java 8, har vi noen ganger ikke noe valg (for eksempel mottar vi Dato objekt fra et bibliotek som ikke er i vår kontroll).

I slike tilfeller har vi flere måter å konvertere java.util.Date til String til vår disposisjon.

2.1. Forbereder Dato Gjenstand

La oss først erklære en forventet String representasjon av datoen vår og definer et mønster av ønsket datoformat:

private static final String EXPECTED_STRING_DATE = "1. august 2018 12:00"; privat statisk slutt String DATE_FORMAT = "MMM d, åååå HH: mm a";

Nå trenger vi faktisk Dato objekt som vi vil konvertere. Vi bruker en Kalender forekomst for å opprette den:

TimeZone.setDefault (TimeZone.getTimeZone ("CET")); Kalenderkalender = Calendar.getInstance (); calendar.set (2018, Calendar.AUGUST, 1, 12, 0); Dato dato = calendar.getTime ();

Vi har satt standard Tidssone til CET for å forhindre problemer når du jobber med den nye API-en senere. Vi bør merke oss det de Dato i seg selv har ingen tidssone, men dens toString () bruker gjeldende standard tidssone.

Vi bruker dette Dato eksempel i alle eksemplene nedenfor.

2.2. Bruker SimpleDateFormat Klasse

Vi vil bruke format() metoden for SimpleDateFormat klasse i dette eksemplet. La oss lage en forekomst av den ved å bruke datoformatet:

DateFormat formatter = ny SimpleDateFormat (DATE_FORMAT);

Etter dette kan vi formatere datoen vår og sammenligne den med forventet produksjon:

Streng formattedDate = formatter.format (dato); assertEquals (EXPECTED_STRING_DATE, formattedDate);

2.3. Bruke det abstrakte DateFormat Klasse

Som vi kunne ha sett, SimpleDateFormat er en underklasse av det abstrakte DateFormat klasse. Denne klassen gir forskjellige metoder for dato- og tidsformatering.

Vi bruker den for å oppnå samme produksjon som ovenfor:

String formattedDate = DateFormat .getDateTimeInstance (DateFormat.MEDIUM, DateFormat.SHORT) .format (date);

Med denne tilnærmingen passerer vi stilmønstre - MEDIUM for datoen og KORT for tiden i vårt tilfelle.

3. Bruke Formaterer Klasse

En annen enkel måte å få det samme på String som i tidligere eksempler er å bruke Formaterer klasse.

Selv om dette kanskje ikke er den mest lesbare løsningen, det er en trådsikker one-liner som kan være nyttig, spesielt i et miljø med flere tråder (vi bør huske på det SimpleDateFormat er ikke trådsikker):

Streng formattedDate = String.format ("% 1 $ tb% 1 $ te,% 1 $ tY% 1 $ tI:% 1 $ tM% 1 $ Tp", dato);

Vi brukte 1$ for å indikere at vi bare sender et argument som skal brukes med hvert flagg. En detaljert forklaring av flaggene ble funnet på Dato / tidskonvertering del av Formaterer klasse.

4. Konvertering ved hjelp av Java 8 API for dato / tid

De Dato tid API fra Java 8 er langt kraftigere enn java.util.Date og java.util.Kalender klasser, og vi bør bruke det når det er mulig. La oss se hvordan vi kan bruke den til å konvertere eksisterende Dato ha innvendinger String.

Denne gangen bruker vi DateTimeFormatter klasse og dens format() metode, samt samme datomønster, erklært i avsnitt 2.1:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern (DATE_FORMAT);

For å bruke den nye API-en, må vi konvertere vår Dato motsette seg et Umiddelbar gjenstand:

Øyeblikkelig øyeblikkelig = date.toInstant ();

Siden vi forventet String har både dato og klokkeslett, vi må også konvertere Umiddelbar ha innvendinger LocalDateTime:

LocalDateTime ldt = øyeblikkelig .atZone (ZoneId.of ("CET")) .toLocalDateTime ();

Og til slutt kan vi enkelt få formateringen String:

Streng formattedDate = ldt.format (formatter);

5. Konklusjon

I denne artikkelen illustrerte vi flere måter å konvertere på java.util.Date gjenstander til String. Vi viste først hvordan du gjør det ved å bruke den eldre java.util.Date og java.util.Kalender klasser og tilsvarende datoformateringskurs.

Så brukte vi Formaterer klasse og til slutt Java 8 Date / Time API.

Som alltid kan fullstendig kildekode finnes på GitHub.


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