Prevod reťazca na dátum v Jave

1. Prehľad

V tomto návode preskúmame niekoľko spôsobov prevodu String predmety do Dátum predmety. Začneme novým Dátum Čas API - java.time ktorý bol predstavený v Jave 8 predtým, ako sa pozrel na starý java.util.Date údajový typ používaný aj na reprezentáciu dátumov.

Na záver sa tiež pozrieme na niektoré externé knižnice na konverziu pomocou Joda-Time a Apache Commons Lang DateUtils trieda.

2. Konvertovanie String do LocalDate alebo LocalDateTime

LocalDate a LocalDateTime sú nemenné objekty dátumu a času, ktoré predstavujú dátum a neskôr dátum a čas. Štandardne sú dátumy Java vo formáte ISO-8601, takže ak máme akýkoľvek reťazec, ktorý predstavuje dátum a čas v tomto formáte, potom môžeme použiť analyzovať () API týchto tried priamo.

Tu je trochu viac podrobností o tomto novom API.

2.1. Pomocou Analyzovať API

Poskytovanie rozhrania API pre dátum a čas analyzovať () metódy analýzy a String ktorý obsahuje informácie o dátume a čase. Ak chcete previesť reťazcové objekty na LocalDate a LocalDateTime predmety, String musí predstavovať platný dátum alebo čas podľa ISO_LOCAL_DATE alebo ISO_LOCAL_DATE_TIME.

Inak a DateTimeParseException bude vyhodený za behu.

V našom prvom príklade poďme konvertovať a String do a java.time.LocalDate:

LocalDate date = LocalDate.parse ("2018-05-05");

Podobný prístup k uvedenému je možné použiť na prevod a String do a java.time.LocalDateTime:

LocalDateTime dateTime = LocalDateTime.parse ("2018-05-05T11: 50: 55");

Je dôležité poznamenať, že obidve LocalDate a LocalDateTime objekty sú časové pásmo agnostické. Avšak keď potrebujeme pracovať s konkrétnym dátumom a časmi konkrétneho časového pásma, môžeme použiť ZonedDateTimeanalyzovať metóda priamo na získanie konkrétneho dátumu a času v časovom pásme:

ZonedDateTime zonedDateTime = ZonedDateTime.parse ("2015-05-05T10: 15: 30 + 01: 00 [Európa / Paríž]");

Poďme sa teraz pozrieť na to, ako prevádzame reťazce s vlastným formátom.

2.2. Pomocou Analyzovať API s vlastným formátovačom

Prevod a String s vlastným formátom dátumu do a Dátum objekt je rozšírená operácia v Jave.

Pre tento účel, použijeme DateTimeFormatter trieda, ktorá poskytuje množstvo preddefinovaných formátovačov, a umožňuje nám definovať formátovač.

Začnime príkladom použitia jedného z preddefinovaných formátovacích nástrojov formátu DateTimeFormatter:

Reťazec dateInString = "19590709"; LocalDate date = LocalDate.parse (dateInString, DateTimeFormatter.BASIC_ISO_DATE);

V nasledujúcom príklade vytvoríme formátovač, ktorý použije formát „EEE, MMM drrr“. Tento formát určuje tri znaky pre celý deň názvu týždňa, jedna číslica predstavuje deň v mesiaci, tri znaky predstavuje mesiac a štyri číslice predstavuje rok.

Tento formátovač rozpoznáva reťazce ako „Pi, 3. januára 2003 ″ alebo „St, 23. marca 1994“:

Reťazec dateInString = "Po, 5. mája 1980"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("EEE, d MMM rrrr", Locale.ENGLISH); LocalDate dateTime = LocalDate.parse (dateInString, formátovač);

2.3. Spoločné vzory dátumu a času

Pozrime sa na niektoré bežné vzorce dátumu a času:

  • y - Rok (1996; 96)
  • M - Mesiac v roku (júl; júl; 07)
  • d - deň v mesiaci (1 - 31)
  • E - Názov dňa v týždni (piatok, nedeľa)
  • a Značka dopoludnia / hod. (AM, PM)
  • H - Hodina v deň (0 - 23)
  • h - hodina v am / pm (1-12)
  • m - minúta za hodinu (0-60)
  • s - sekunda za minútu (0-60)

Celý zoznam symbolov, ktoré môžeme použiť na určenie vzoru na analýzu, nájdete tu.

Ak potrebujeme konvertovať java.time datuje do staršej java.util.Date objekt, prečítajte si tento článok, kde nájdete ďalšie podrobnosti.

3. Konvertovanie String do java.util.Date

Pred jazykom Java 8 bol mechanizmus dátumu a času Java poskytovaný starými API z java.util.Date, java.util.Calendara java.util.TimeZone triedy s ktorými niekedy ešte musíme pracovať.

Pozrime sa, ako previesť reťazec na a java.util.Date objekt:

SimpleDateFormat formatter = nový SimpleDateFormat ("dd-MMM-rrrr", Locale.ENGLISH); Reťazec dateInString = "7. júna 2013"; Dátum dátum = formatter.parse (dateInString);

Vo vyššie uvedenom príklade najskôr musíme skonštruovať a SimpleDateFormat objekt odovzdaním vzoru popisujúceho formát dátumu a času.

Ďalej musíme vyvolať analyzovať () metóda prechádzajúca dátumom String. Ak String odovzdaný argument nie je v rovnakom formáte ako vzor, ​​potom a ParseException bude vyhodený.

3.1. Pridávanie informácií o časovom pásme do java.util.Date

Je dôležité poznamenať, že java.util.Date nemá koncept časového pásma, a predstavuje iba počet sekúnd, ktoré uplynuli od epochy Unixu - 1970-01-01T00: 00: 00Z.

Ale keď tlačíme Dátum objekt bude vždy vytlačený s predvoleným časovým pásmom systému Java.

V tomto poslednom príklade sa pozrieme na to, ako formátovať dátum, pridaním informácií o časovom pásme:

SimpleDateFormat formatter = new SimpleDateFormat ("dd-M-rrrr hh: mm: ss a", Locale.ENGLISH); formatter.setTimeZone (TimeZone.getTimeZone ("Amerika / New_York")); Reťazec dateInString = "22.01.2015 10:15:55"; Dátum dátum = formatter.parse (dateInString); Reťazec formattedDateString = formatter.format (dátum);

Časové pásmo JVM môžeme zmeniť aj programovo, čo sa však neodporúča:

TimeZone.setDefault (TimeZone.getTimeZone ("GMT"));

4. Externé knižnice

Teraz, keď dobre rozumieme tomu, ako prevádzať String predmety do Dátum objekty využívajúce nové a staré API ponúkané jadrom Java, poďme sa pozrieť na niektoré externé knižnice.

4.1. Knižnica Joda-Time

Alternatíva k jadru Java Dátum a Čas knižnica je Joda-Time. Autori teraz odporúčajú používateľom migrovať na java.time (JSR-310), ak to nie je možné, potom Knižnica Joda-Time poskytuje vynikajúcu alternatívu pre prácu s dátumom a časom. Táto knižnica poskytuje takmer všetky funkcie podporované v prostredí Java 8 Dátum Čas projekt.

Artefakt nájdete na Maven Central:

 joda-time joda-time 2.10 

Tu je rýchly príklad práce so štandardom Dátum Čas:

DateTimeFormatter formatter = DateTimeFormat.forPattern ("dd / MM / rrrr HH: mm: ss"); Reťazec dateInString = "06.06.2013 10:11:59"; DateTime dateTime = DateTime.parse (dateInString, formátovač);

Pozrime sa tiež na príklad explicitného nastavenia časového pásma:

DateTimeFormatter formatter = DateTimeFormat.forPattern ("dd / MM / rrrr HH: mm: ss"); Reťazec dateInString = "06.06.2013 10:11:59"; DateTime dateTime = DateTime.parse (dateInString, formátovač); DateTime dateTimeWithZone = dateTime.withZone (DateTimeZone.forID ("Asia / Kolkata"));

4.2. Apache Commons Lang - DateUtils

The DateUtils trieda poskytuje veľa užitočné nástroje, ktoré uľahčujú prácu s týmto odkazom Kalendár a Dátum predmety.

Artefakt commons-lang3 je k dispozícii na serveri Maven Central:

 org.apache.commons commons-lang3 3.7 

Poďme previesť dátum String pomocou Pole dátumových vzorov do a java.util.Date:

Reťazec dateInString = "07 / 06-2013"; Date date = DateUtils.parseDate (dateInString, new String [] {"rrrr-MM-dd HH: mm: ss", "dd / MM-rrrr"});

5. Záver

V tomto článku sme ilustrovali niekoľko spôsobov prevodu reťazcov na rôzne typy Dátum objekty (s časom i bez času), a to v bežnej Jave, ako aj pomocou externých knižníc.

Celý zdrojový kód článku je k dispozícii na GitHub.


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