Preveďte java.util. Dátum na reťazec

1. Prehľad

V tomto tutoriáli si ukážeme, ako môžeme konvertovať Dátum predmety do String objekty v Jave. Aby sme to dosiahli, budeme pracovať so staršími java.util.Date typu aj s novým Dátum Čas API zavedené v Jave 8.

Ak sa chcete dozvedieť, ako urobiť opačnú konverziu, t. J. Od String do Dátum týchto typov si môžete pozrieť tento návod tu.

Ďalšie informácie týkajúce sa nového Dátum Čas API, pozrite si tento súvisiaci návod.

2. Konvertovanie java.util.Date do String

Aj keď by sme nemali používať java.util.Date ak pracujeme s Java 8, niekedy nemáme na výber (napr. dostávame Dátum objekt z knižnice, ktorú nemáme pod kontrolou).

V takýchto prípadoch máme niekoľko spôsobov prevodu java.util.Date do String k dispozícii.

2.1. Príprava Dátum Objekt

Najprv vyhlásime očakávané String reprezentácia nášho dátumu a definovanie vzoru požadovaného formátu dátumu:

súkromný statický konečný reťazec EXPECTED_STRING_DATE = "1. augusta 2018 12:00"; súkromný statický konečný reťazec DATE_FORMAT = "MMM d, rrrr HH: mm a";

Teraz potrebujeme skutočné Dátum objekt, ktorý by sme chceli previesť. Použijeme a Kalendár napríklad na jeho vytvorenie:

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

Nastavili sme predvolené nastavenie Časové pásmo do SEČ aby sa zabránilo problémom pri neskoršej práci s novým API. Mali by sme si to všimnúť the Dátum sám nemá žiadne časové pásmo, ale jeho natiahnuť() používa aktuálne predvolené časové pásmo.

Budeme to používať Dátum napríklad vo všetkých našich príkladoch uvedených nižšie.

2.2. Pomocou SimpleDateFormat Trieda

Využijeme formát () metóda SimpleDateFormat triedy v tomto príklade. Vytvorme si jeho inštanciu pomocou nášho formátu dátumu:

Formátovač DateFormat = nový SimpleDateFormat (DATE_FORMAT);

Potom môžeme náš dátum naformátovať a porovnať s očakávaným výstupom:

Reťazec formattedDate = formatter.format (dátum); assertEquals (EXPECTED_STRING_DATE, formattedDate);

2.3. Pomocou abstraktu Formát dátumu Trieda

Ako sme mohli vidieť, SimpleDateFormat je podtrieda abstraktu Formát dátumu trieda. Táto trieda poskytuje rôzne metódy formátovania dátumu a času.

Použijeme ho na dosiahnutie rovnakého výstupu ako vyššie:

Reťazec formattedDate = DateFormat .getDateTimeInstance (DateFormat.MEDIUM, DateFormat.SHORT) .format (dátum);

Týmto prístupom prechádzame štýlové vzory - STREDNÉ pre dátum a KRÁTKY na čas v našom prípade.

3. Pomocou Formátovač Trieda

Ďalším jednoduchým spôsobom, ako získať to isté String ako v predchádzajúcich príkladoch je použitie Formátovač trieda.

Aj keď to nemusí byť najčitateľnejšie riešenie, je to jednosmerná linka bezpečná pre vlákna, ktorá by mohla byť užitočná, najmä v prostredí s viacerými vláknami (mali by sme na to pamätať SimpleDateFormat nie je bezpečný pre vlákna):

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

Použili sme 1$ na označenie toho, že odovzdáme iba jeden argument, ktorý sa použije s každým príznakom. Podrobné vysvetlenie príznakov je možné nájsť v časti Konverzie dátumu a času v Formátovač trieda.

4. Konverzia pomocou Javy 8 Dátum / čas API

The Dátum Čas API z Java 8 je oveľa výkonnejšie ako java.util.Date a java.util.Calendar triedy a mali by sme ho používať vždy, keď je to možné. Pozrime sa, ako to môžeme použiť na prevod našich existujúcich Dátum namietať proti String.

Tentokrát použijeme DateTimeFormatter trieda a jej formát () rovnaká metóda dátumu uvedená v časti 2.1:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern (DATE_FORMAT);

Aby sme mohli používať nové API, musíme previesť naše Dátum namietať proti Okamžité objekt:

Okamžitý okamih = date.toInstant ();

Pretože naše očakávané String má časovú aj časovú časť, musíme tiež previesť Okamžité namietať proti LocalDateTime:

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

A konečne môžeme ľahko získať formátovanie String:

Reťazec formattedDate = ldt.format (formátovač);

5. Záver

V tomto článku sme ilustrovali niekoľkými spôsobmi premeny java.util.Date predmety do String. Najprv sme si ukázali, ako to urobiť pomocou staršieho java.util.Date a java.util.Calendar triedy a zodpovedajúce triedy formátovania dátumu.

Potom sme použili Formátovač triedy a nakoniec rozhranie Java 8 Date / Time API.

Kompletný zdrojový kód nájdete ako vždy na serveri GitHub.


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