Konverter java.util.Date til streng

1. Oversigt

I denne vejledning viser vi, hvordan vi kan konvertere Dato genstande mod Snor objekter i Java. For at gøre det arbejder vi med de ældre java.util.Date type såvel som med den nye Dato tid API introduceret i Java 8.

Hvis du gerne vil lære at gøre den modsatte konvertering, dvs. fra Snor til Dato typer, kan du tjekke denne vejledning her.

For flere detaljer vedrørende nyt Dato tid API, se denne relaterede vejledning.

2. Konvertering java.util.Date til Snor

Selvom vi ikke skal bruge java.util.Date hvis vi arbejder med Java 8, har vi nogle gange ikke noget valg (f.eks. modtager vi Dato objekt fra et bibliotek, der ikke er under vores kontrol).

I sådanne tilfælde har vi flere måder at konvertere på java.util.Date til Snor til vores rådighed.

2.1. Forberedelse af Dato Objekt

Lad os først erklære en forventet Snor repræsentation af vores dato og definer et mønster med det ønskede datoformat:

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

Nu har vi brug for faktisk Dato objekt, som vi gerne vil konvertere. Vi bruger en Kalender eksempel for at oprette det:

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

Vi har sat standard Tidszone til CET for at forhindre problemer, når du arbejder med den nye API senere. Det skal vi bemærke det Dato i sig selv har ingen tidszone, men dens toString () bruger den aktuelle standardtidszone.

Vi bruger dette Dato eksempel i alle vores eksempler nedenfor.

2.2. Bruger SimpleDateFormat Klasse

Vi gør brug af format() metode til SimpleDateFormat klasse i dette eksempel. Lad os oprette en forekomst af det ved hjælp af vores datoformat:

DateFormat formatter = ny SimpleDateFormat (DATE_FORMAT);

Herefter kan vi formatere vores dato og sammenligne den med den forventede output:

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

2.3. Brug af det abstrakte Datoformat Klasse

Som vi kunne have set, SimpleDateFormat er en underklasse af det abstrakte Datoformat klasse. Denne klasse indeholder forskellige metoder til dato- og tidsformatering.

Vi bruger det til at opnå den samme output som ovenfor:

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

Med denne tilgang passerer vi stilmønstre - MEDIUM for datoen og KORT for tiden i vores tilfælde.

3. Brug af Formater Klasse

En anden enkel måde at få det samme på Snor som i tidligere eksempler er at bruge Formater klasse.

Selvom dette måske ikke er den mest læsbare løsning, det er en trådsikker one-liner, der kan være nyttig, især i et miljø med flere tråde (det skal vi huske på SimpleDateFormat er ikke trådsikker):

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

Vi brugte 1$ for at indikere, at vi kun sender et argument, der skal bruges med hvert flag. En detaljeret forklaring af flagene kan findes på Dato / Tidskonvertering del af Formater klasse.

4. Konvertering ved hjælp af Java 8 Dato / tid API

Det Dato tid API fra Java 8 er langt mere kraftfuld end java.util.Date og java.util.Kalender klasser, og vi skal bruge det, når det er muligt. Lad os se, hvordan vi kan bruge det til at konvertere vores eksisterende Dato protesterer mod Snor.

Denne gang bruger vi DateTimeFormatter klasse og dens format() metode samt det samme datomønster, der er erklæret i afsnit 2.1:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern (DATE_FORMAT);

For at bruge den nye API skal vi konvertere vores Dato modsætter sig et Øjeblikkelig objekt:

Øjeblikkelig øjeblikkelig = date.toInstant ();

Siden vores forventede Snor har både dato og klokkeslæt, vi skal også konvertere Øjeblikkelig protesterer mod LocalDateTime:

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

Og endelig kan vi let få vores formaterede Snor:

Streng formattedDate = ldt.format (formatter);

5. Konklusion

I denne artikel illustrerede vi flere måder at konvertere på java.util.Date genstande mod Snor. Vi viste først, hvordan man gør det ved hjælp af den ældre java.util.Date og java.util.Kalender klasser og tilsvarende datoformateringskurser.

Så brugte vi Formater klasse og endelig Java 8 Date / Time API.

Som altid kan komplet kildekode findes på GitHub.