A karakterlánc konvertálása dátumra Java-ban

1. Áttekintés

Ebben az oktatóanyagban feltárjuk a konverzió több módját Húr tárgyakat Dátum tárgyakat. Kezdjük az újval Dátum idő API - java.time amelyet a Java 8-ban vezettek be, mielőtt megnéztük volna a régit java.util.Dátum a dátumok ábrázolására is használt adattípus.

Befejezésül néhány külső könyvtárat is megnézünk átalakításra a Joda-Time és az Apache Commons Lang használatával DateUtils osztály.

2. Konvertálás Húr nak nek LocalDate vagy LocalDateTime

LocalDate és LocalDateTime változhatatlan dátum-idő objektumok, amelyek dátumot, utóbb dátumot és időpontot képviselnek. Alapértelmezés szerint a Java dátumok ISO-8601 formátumban vannak, tehát ha van olyan karaktersorozatunk, amely ebben a formátumban dátumot és időpontot képvisel, akkor használhatjuk a elemzés () Ezen osztályok API-ja közvetlenül.

Itt van egy kicsit részletesebben erről az új API-ról.

2.1. Használni a Elemzés API

A Dátum-Idő API biztosítja elemzés () elemzési módszerek a Húr amely dátum és idő információt tartalmaz. String objektumok konvertálása LocalDate és LocalDateTime tárgyak, a Húr érvényes dátumot vagy időpontot kell képviselnie ISO_LOCAL_DATE vagy ISO_LOCAL_DATE_TIME szerint.

Egyébként a DateTimeParseException futás közben dobják.

Első példánkban konvertáljuk a Húr a java.time.LocalDate:

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

A fentiekhez hasonló megközelítés használható az a konverziójára Húr a java.time.LocalDateTime:

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

Fontos megjegyezni, hogy mind a LocalDate és LocalDateTime az objektumok időzóna agnosztikusak. Azonban, amikor az időzóna-specifikus dátummal és időkkel kell foglalkoznunk, használhatjuk a ZonedDateTimeelemzés módszer közvetlenül az időzóna-specifikus dátum és idő megszerzéséhez:

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

Most nézzük meg, hogyan konvertálunk karakterláncokat egyéni formátummal.

2.2. Használni a Elemzés API egyéni formázóval

Konvertálás a Húr egyedi dátumformátummal a-ba Dátum Az object egy elterjedt művelet a Java-ban.

Erre a célra, használjuk a DateTimeFormatter osztály, amely számos előre definiált formázót biztosít, és lehetővé teszi számunkra, hogy meghatározzunk egy formázót.

Kezdjük egy példával az egyik előre definiált formázójára DateTimeFormatter:

String dateInString = "19590709"; LocalDate date = LocalDate.parse (dateInString, DateTimeFormatter.BASIC_ISO_DATE);

A következő példában hozzunk létre egy formázót, amely az „EEE, MMM d yyyy” formátumot alkalmazza. Ez a formátum három karaktert határoz meg a hét teljes napjának nevéhez, egy számjegy a hónap napját, három karakter a hónapot és négy számjegy az évet.

Ez a formázó olyan karakterláncokat ismer fel, mint például2003. január 3., péntek vagy 1994. március 23., szerda“:

String dateInString = "H, 1980. május 05."; DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("EEE, d MMM yyyy", Locale.ENGLISH); LocalDate dateTime = LocalDate.parse (dateInString, formázó);

2.3. Általános dátum- és időminták

Nézzünk meg néhány általános dátum- és időmintát:

  • y - Év (1996; 96)
  • M - Év hónapja (július; július; 07)
  • d - Nap a hónapban (1-31)
  • E - Nap neve a héten (péntek, vasárnap)
  • a Am / pm marker (AM, PM)
  • H - Óra a napban (0–23)
  • h - Óra reggel / este (1–12)
  • m - Perc órában (0-60)
  • s - Másodperc a percben (0-60)

Kattintson a szimbólumok teljes listájához, amelyek segítségével elemezhetünk egy mintát az elemzéshez.

Ha meg kell térnünk java.time a régebbi dátumokra esik java.util.Dátum objektumot, további részletekért olvassa el ezt a cikket.

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

A Java 8 előtt a Java dátum és idő mechanizmust a régi API-k szolgáltatták java.util.Dátum, java.util.Naptár, és java.util.TimeZone osztályok amivel néha még dolgoznunk kell.

Nézzük meg, hogyan lehet átalakítani a karakterláncot a-vá java.util.Dátum tárgy:

SimpleDateFormat formatter = new SimpleDateFormat ("dd-MMM-yyyy", Locale.HUNLISH); String dateInString = "2013. június 7."; Dátum dátum = formatter.parse (dateInString);

A fenti példában először meg kell konstruálnunk a SimpleDateFormat tárgy a dátum és az idő formátumát leíró minta átadásával.

Ezután meg kell hívnunk a elemzés () a dátumot elhaladó módszer Húr. Ha a Húr az átadott argumentum nem azonos formátumú, mint a minta, akkor a ParseException dobni fogják.

3.1. Időzóna-információk hozzáadása a következőhöz: java.util.Dátum

Fontos megjegyezni, hogy a java.util.Dátum nincs fogalma az időzónáról, és csak az Unix-korszak ideje - 1970-01-01T00: 00: 00Z - eltelt másodpercek számát jelenti.

De amikor kinyomtatjuk a Dátum objektumot, mindig a Java alapértelmezett időzónájával nyomtatja ki.

Ebben az utolsó példában megnézzük, hogyan formázzunk egy dátumot, hozzáadva az időzóna adatait:

SimpleDateFormat formatter = new SimpleDateFormat ("éééé-h-éééé óóóóóóóóóóó: mm: ss a", Nyelv.HUN); formatter.setTimeZone (TimeZone.getTimeZone ("Amerika / New_York")); String dateInString = "2015-01-22 10:15:55 AM"; Dátum dátum = formatter.parse (dateInString); String formattedDateString = formatter.format (dátum);

Programozatosan módosíthatjuk a JVM időzónáját is, de ez nem ajánlott:

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

4. Külső könyvtárak

Most, hogy jól megértettük a megtérést Húr kifogásolja Dátum az objektumokat, amelyek a Java alapja által kínált új és régi API-kat használják, vessünk egy pillantást néhány külső könyvtárra.

4.1. Joda-Time könyvtár

A Java alapvető alternatívája Dátum és Idő könyvtár Joda-Time. Bár a szerzők most már ajánlják a felhasználóknak az áttérést java.time (JSR-310), ha ez nem lehetséges, akkor a A Joda-Time könyvtár kiváló alternatívát kínál a Dátum és Idő használatához. Ez a könyvtár nagyjából az összes olyan képességet biztosítja, amelyet a Java 8 támogat Dátum idő projekt.

A műtárgy megtalálható a Maven Central oldalon:

 joda-idő joda-idő 2.10 

Itt egy gyors példa a szabvány használatához Dátum idő:

DateTimeFormatter formatter = DateTimeFormat.forPattern ("éééé / hh / éééé ÓÓ: h: ss"); String dateInString = "2013.06.06. 10:11:59"; DateTime dateTime = DateTime.parse (dateInString, formázó);

Lássunk egy példát az időzóna kifejezett beállítására is:

DateTimeFormatter formatter = DateTimeFormat.forPattern ("éééé / hh / éééé ÓÓ: h: ss"); String dateInString = "2013.06.06. 10:11:59"; DateTime dateTime = DateTime.parse (dateInString, formázó); DateTime dateTimeWithZone = dateTime.withZone (DateTimeZone.forID ("Asia / Kolkata"));

4.2. Apache Commons Lang - DateUtils

A DateUtils osztály sokakat nyújt hasznos segédprogramok, amelyek megkönnyítik az örökséggel való munkát Naptár és Dátum tárgyakat.

A commons-lang3 artefaktum elérhető a Maven Central oldalról:

 org.apache.commons commons-lang3 3.7 

Konvertáljuk a dátumot Húr egy an használatával Sor a dátummintákat a java.util.Dátum:

String dateInString = "07 / 06-2013"; Dátum dátum = DateUtils.parseDate (dateInString, új karakterlánc [] {"éééé-HH-NN ÓÓ: mm: ss", "éééé / HH-éééé"});

5. Következtetés

Ebben a cikkben számos módszert illusztráltunk a karakterláncok különböző típusú konvertálására Dátum objektumok (idővel és idő nélkül), mind egyszerű Java-ban, mind külső könyvtárak használatával.

A cikk teljes forráskódja elérhető a GitHub oldalon.