Pretvori java.util.Date u String

1. Pregled

U ovom uputstvu pokazat ćemo kako možemo Pretvoriti Datum prigovara se Niz objekti u Javi. Da bismo to učinili, radit ćemo sa starijima java.util.Datum tip kao i s novim Datum vrijeme API predstavljen u Javi 8.

Ako želite naučiti kako napraviti obratnu konverziju, tj. Iz Niz do Datum tipove, ovaj tutorial možete pogledati ovdje.

Za više detalja o novom Datum vrijeme API, pogledajte ovaj srodni vodič.

2. Pretvaranje java.util.Datum do Niz

Iako ne bismo trebali koristiti java.util.Datum ako radimo s Javom 8, ponekad nemamo izbora (npr. primamo Datum objekt iz knjižnice koji nije pod našom kontrolom).

U takvim slučajevima imamo nekoliko načina za pretvorbu java.util.Datum do Niz na raspolaganju.

2.1. Priprema Datum Objekt

Prvo objavimo očekivano Niz prikaz našeg datuma i definirajte obrazac željenog formata datuma:

privatni statički završni niz EXPECTED_STRING_DATE = "1. kolovoza 2018. 12:00"; privatni statički završni niz DATE_FORMAT = "MMM d, gggg HH: mm a";

Sad trebamo stvarne Datum objekt koji bismo željeli pretvoriti. Koristit ćemo a Kalendar instancu za stvaranje:

TimeZone.setDefault (TimeZone.getTimeZone ("CET")); Kalendar kalendara = Calendar.getInstance (); calendar.set (2018, Calendar.AUGUST, 1, 12, 0); Datum datum = calendar.getTime ();

Postavili smo zadano Vremenska zona do CET kako biste spriječili probleme prilikom kasnijeg rada s novim API-jem. To bismo trebali primijetiti the Datum sama nema nikakvu vremensku zonu, ali je toString () koristi trenutnu zadanu vremensku zonu.

Koristit ćemo ovo Datum primjer u svim našim primjerima u nastavku.

2.2. Koristiti SimpleDateFormat Razred

Iskoristit ćemo format() metoda SimpleDateFormat razreda u ovom primjeru. Stvorimo njegovu instancu koristeći naš format datuma:

DateFormat formatter = novi SimpleDateFormat (DATE_FORMAT);

Nakon toga možemo oblikovati svoj datum i usporediti ga s očekivanim izlazom:

Niz formattedDate = formatter.format (datum); assertEquals (EXPECTED_STRING_DATE, formattedDate);

2.3. Koristeći Sažetak Oblik datuma Razred

Kao što smo mogli vidjeti, SimpleDateFormat je podrazred sažetka Oblik datuma razred. Ova klasa nudi razne metode formatiranja datuma i vremena.

Koristit ćemo ga za postizanje istog rezultata kao gore:

Niz formattedDate = DateFormat .getDateTimeInstance (DateFormat.MEDIUM, DateFormat.SHORT) .format (datum);

Ovim pristupom donosimo stilske obrasce - SREDNJI za datum i KRATAK za vrijeme u našem slučaju.

3. Korištenje Formatter Razred

Još jedan jednostavan način za dobivanje istog Niz kao u ranijim primjerima je korištenje Formatter razred.

Iako ovo možda nije najčitanije rješenje, to je jednoslojna cijev bez navoja koja bi mogla biti korisna, posebno u okruženju s više navoja (trebali bismo imati na umu da SimpleDateFormat nije zaštićen niti):

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

Koristili smo 1$ kako bismo naznačili da ćemo prosljeđivati ​​samo jedan argument koji će se koristiti sa svakom zastavicom. Detaljno objašnjenje zastavica može se naći u dijelu Pretvorbe datuma / vremena Formatter razred.

4. Konvertiranje pomoću Jave 8 Datum / vrijeme API

The Datum vrijeme API iz Jave 8 daleko je moćniji od java.util.Datum i java.util.Kalendar klase i trebali bismo ga koristiti kad god je to moguće. Pogledajmo kako ga možemo koristiti za pretvaranje postojećeg Datum prigovoriti Niz.

Ovaj put koristit ćemo DateTimeFormatter razreda i svoje format() metoda, kao i isti obrazac datuma, deklariran u odjeljku 2.1:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern (DATE_FORMAT);

Da bismo koristili novi API, moramo pretvoriti naš Datum prigovoriti an Trenutak objekt:

Instant instant = date.toInstant ();

Od našeg očekivanog Niz ima i datum i vrijeme, također moramo pretvoriti Trenutak prigovoriti LocalDateTime:

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

I konačno, lako možemo dobiti svoje formatiranje Niz:

Niz formattedDate = ldt.format (formatter);

5. Zaključak

U ovom smo članku ilustrirali nekoliko načina pretvaranja java.util.Datum prigovara se Niz. Prvo smo pokazali kako se to radi pomoću starijih java.util.Datum i java.util.Kalendar klase i odgovarajuće klase oblikovanja datuma.

Tada smo koristili Formatter klase i, na kraju, Java 8 Date / Time API.

Kao i uvijek, potpuni izvorni kod možete pronaći na GitHubu.