A java.util.Date konvertálása karakterláncra

1. Áttekintés

Ebben az oktatóanyagban megmutatjuk, hogyan tudunk alakítani Dátum kifogásolja Húr objektumok Java-ban. Ehhez az idősebbekkel dolgozunk java.util.Dátum típusú, valamint az új Dátum idő A Java 8-ban bevezetett API.

Ha szeretné megtanulni, hogyan kell elvégezni az ellenkező konverziót, azaz Húr nak nek Dátum típusú, itt megnézheti ezt az oktatóanyagot.

További részletek az új Dátum idő API, kérjük, olvassa el ezt a kapcsolódó oktatóanyagot.

2. Konvertálás java.util.Dátum nak nek Húr

Bár nem szabad használni java.util.Dátum ha a Java 8-mal dolgozunk, néha nincs más választásunk (például a Dátum objektum egy olyan könyvtárból, amely nem tartozik a kezünkbe).

Ilyen esetekben többféle lehetőségünk van a konverzióra java.util.Dátum nak nek Húr rendelkezésünkre áll.

2.1. A Dátum Tárgy

Nyilvánítsuk először elvártnak Húr dátumunk ábrázolása és meghatározzuk a kívánt dátumformátum mintáját:

privát statikus végső karakterlánc EXPECTED_STRING_DATE = "2018. augusztus 1., 12:00"; privát statikus végleges karakterlánc DATE_FORMAT = "MMM d, yyyy HH: mm a";

Most ténylegesre van szükségünk Dátum objektum, amelyet átalakítani szeretnénk. Használjuk a Naptár létrehozása:

TimeZone.setDefault (TimeZone.getTimeZone ("CET")); Naptár naptár = Calendar.getInstance (); calendar.set (2018, Naptár. Augusztus, 1., 12., 0); Dátum dátum = calendar.getTime ();

Alapértelmezettet állítottunk be Időzóna nak nek CET hogy megakadályozzuk a problémákat, amikor később az új API-val dolgozunk. Meg kell jegyeznünk a Dátum önmagában nincs időzónája, de az toString () az aktuális alapértelmezett időzónát használja.

Ezt fogjuk használni Dátum az összes alábbi példánkban.

2.2. Használni a SimpleDateFormat Osztály

Ki fogjuk használni a formátum() módszere SimpleDateFormat osztály ebben a példában. Hozzunk létre egy példányt a dátumformátumunk használatával:

DateFormat formatter = new SimpleDateFormat (DATE_FORMAT);

Ezt követően formázhatjuk a dátumot, és összehasonlíthatjuk a várható kimenettel:

String formattedDate = formatter.format (dátum); assertEquals (EXPECTED_STRING_DATE, formattedDate);

2.3. Az Absztrakt használata Dátum formátum Osztály

Mint láthattuk, SimpleDateFormat az absztrakt egyik alosztálya Dátum formátum osztály. Ez az osztály különféle módszereket kínál a dátum és idő formázására.

A fentiekkel megegyező kimenet elérésére fogjuk használni:

String formattedDate = DateFormat .getDateTimeInstance (DateFormat.MEDIUM, DateFormat.SHORT) .format (dátum);

Ezzel a megközelítéssel átadjuk a stílusmintákat - KÖZEPES a dátumra és RÖVID az időre esetünkben.

3. A Formázó Osztály

Egy másik egyszerű módja annak, hogy ugyanezt elérjük Húr mint a korábbi példákban, a Formázó osztály.

Bár ez nem biztos, hogy a legolvasottabb megoldás, ez egy menetbiztos egybélés, amely hasznos lehet, különösen többszálas környezetben (ezt szem előtt kell tartanunk SimpleDateFormat nem menetbiztos):

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

Használtuk 1$ annak jelzésére, hogy csak egy argumentumot adunk át, amelyet minden zászlóhoz használunk. A zászlók részletes magyarázata megtalálható a Dátum / Idő Konverziók részben Formázó osztály.

4. Konvertálás Java 8 használatával Dátum / idő API

A Dátum idő A Java 8-ból származó API sokkal erősebb, mint a java.util.Dátum és java.util.Naptár osztályokat, és lehetőség szerint használnunk kell. Lássuk, hogyan tudjuk felhasználni meglévőink átalakítására Dátum tiltakozni Húr.

Ezúttal a DateTimeFormatter osztály és annak formátum() módszer, valamint a 2.1. szakaszban deklarált ugyanaz a dátumminta:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern (DATE_FORMAT);

Az új API használatához szükségünk van konvertálja a mi Dátum kifogásolni egy Azonnali tárgy:

Azonnali azonnali = date.toInstant ();

Mivel várható volt Húr dátum és idő részekkel rendelkezik, át kell alakítanunk a Azonnali tiltakozni LocalDateTime:

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

És végül könnyen megszerezhetjük a formátumunkat Húr:

String formattedDate = ldt.format (formázó);

5. Következtetés

Ebben a cikkben illusztráltuk az átalakítás több módja java.util.Dátum kifogásolja Húr. Először megmutattuk, hogyan lehet ezt megtenni a régebbi használatával java.util.Dátum és java.util.Naptár osztályok és a megfelelő dátumformázó osztályok.

Aztán használtuk a Formázó osztály és végül a Java 8 Date / Time API.

Mint mindig, a teljes forráskód megtalálható a GitHubon.