Pretvori niz u datum u Javi

1. Pregled

U ovom vodiču, istražit ćemo nekoliko načina za pretvorbu Niz predmeti u Datum predmeta. Krenut ćemo s novim Datum vrijeme API - java.vrijeme koji je uveden u Javi 8 prije gledanja starog java.util.Datum vrsta podataka koja se također koristi za predstavljanje datuma.

Za kraj ćemo pogledati i neke vanjske knjižnice za pretvorbu pomoću Joda-Time i Apache Commons Lang DateUtils razred.

2. Pretvaranje Niz do LocalDate ili LocalDateTime

LocalDate i LocalDateTime su nepromjenjivi objekti datuma i vremena koji predstavljaju datum, a kasnije datum i vrijeme. Prema zadanim postavkama Java datumi su u formatu ISO-8601, pa ako imamo bilo koji niz koji predstavlja datum i vrijeme u ovom formatu, tada možemo koristiti raščlaniti () API ovih klasa izravno.

Evo malo više detalja o ovom novom API-ju.

2.1. Koristiti Raščlani API

API koji nudi datum i vrijeme raščlaniti () metode raščlanjivanja a Niz koja sadrži podatke o datumu i vremenu. Za pretvaranje String objekata u LocalDate i LocalDateTime predmeti, Niz mora predstavljati valjani datum ili vrijeme prema ISO_LOCAL_DATE ili ISO_LOCAL_DATE_TIME.

Inače, a DateTimeParseException bit će bačen za vrijeme izvođenja.

U našem prvom primjeru pretvorimo a Niz do a java.vrijeme.LocalDate:

Datum lokalnog datuma = LocalDate.parse ("05.05.2018.");

Sličan pristup gore navedenom može se koristiti za pretvaranje a Niz do a java.vrijeme.LocalDateTime:

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

Važno je napomenuti da su oba LocalDate i LocalDateTime objekti su agnostički vremenske zone. Međutim, kada trebamo riješiti datum i vrijeme određene vremenske zone možemo koristiti ZonedDateTimeraščlaniti metoda izravno za dobivanje vremena određenog vremenskom zonom:

ZonedDateTime zonedDateTime = ZonedDateTime.parse ("2015-05-05T10: 15: 30 + 01: 00 [Europa / Pariz]");

Pogledajmo sada kako pretvaramo nizove u prilagođeni format.

2.2. Koristiti Raščlani API s prilagođenim formatom

Pretvaranje a Niz s prilagođenim formatom datuma u Datum object je raširena operacija u Javi.

Za ovu svrhu, koristit ćemo DateTimeFormatter klasa koja nudi brojne unaprijed definirane uređaje za formatiranje, i omogućuje nam definiranje oblikovača.

Počnimo s primjerom korištenja jednog od unaprijed definiranih formativača programa DateTimeFormatter:

String dateInString = "19590709"; Datum lokalnog datuma = LocalDate.parse (dateInString, DateTimeFormatter.BASIC_ISO_DATE);

U sljedećem primjeru stvorimo program za oblikovanje koji primjenjuje format "EEE, MMM d gggg". Ovaj format navodi tri znaka za cjelodnevni naziv tjedna, jednu znamenku koja predstavlja dan u mjesecu, tri znaka za mjesec i četiri znamenke za predstavljanje godine.

Ovaj program za oblikovanje prepoznaje nizove poput "Pet, 3. siječnja 2003. ″ ili „Srijeda, 23. ožujka 1994“:

String dateInString = "ponedjeljak, 5. svibnja 1980"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("EEE, d MMM yyyy", Locale.ENGLISH); LocalDate dateTime = LocalDate.parse (dateInString, formatter);

2.3. Uobičajeni uzorci datuma i vremena

Pogledajmo neke uobičajene obrasce datuma i vremena:

  • y - Godina (1996; 96)
  • M - Mjesec u godini (srpanj; srpanj; 07)
  • d - Dan u mjesecu (1-31)
  • E - naziv dana u tjednu (petak, nedjelja)
  • a Oznaka Am / pm (AM, PM)
  • H - Sat u danu (0-23)
  • h - sat ujutro / popodne (1-12)
  • m - minuta u satu (0-60)
  • s - Druga u minuti (0-60)

Potpuni popis simbola pomoću kojih možemo odrediti obrazac za raščlanjivanje kliknite ovdje.

Ako trebamo pretvoriti java.vrijeme datira u starije java.util.Datum objekt, pročitajte ovaj članak za više detalja.

3. Pretvaranje Niz do java.util.Datum

Prije Jave 8, Java datumski i vremenski mehanizam pružali su stari API-ji java.util.Datum, java.util.Kalendar, i java.util.TimeZone razreda s kojim ponekad još uvijek trebamo raditi.

Pogledajmo kako pretvoriti niz u java.util.Datum objekt:

SimpleDateFormat formatter = novi SimpleDateFormat ("dd-MMM-yyyy", Locale.ENGLISH); String dateInString = "7. lipnja 2013."; Datum datum = formatter.parse (dateInString);

U gornjem primjeru, prvo moramo konstruirati a SimpleDateFormat objekt donošenjem uzorka koji opisuje format datuma i vremena.

Dalje, moramo se pozvati na raščlaniti () metoda prenošenja datuma Niz. Ako je Niz proslijeđeni argument nije u istom formatu kao obrazac onda a ParseException bit će bačen.

3.1. Dodavanje podataka o vremenskoj zoni u java.util.Datum

Važno je napomenuti da java.util.Datum nema koncept vremenske zonei predstavlja samo broj sekundi prođenih od vremena Unixa - 1970-01-01T00: 00: 00Z.

Ali, kada ispisujemo Datum objekt izravno, uvijek će se ispisati sa zadanom vremenskom zonom Java sustava.

U ovom posljednjem primjeru pogledati ćemo kako formatirati datum, dodajući podatke o vremenskoj zoni:

SimpleDateFormat formatter = novi SimpleDateFormat ("dd-M-yyyy hh: mm: ss a", Locale.ENGLISH); formatter.setTimeZone (TimeZone.getTimeZone ("America / New_York")); String dateInString = "22-01-2015 10:15:55 AM"; Datum datum = formatter.parse (dateInString); Niz formattedDateString = formatter.format (datum);

Također možemo programski promijeniti vremensku zonu JVM, ali to se ne preporučuje:

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

4. Vanjske knjižnice

Sad kad smo dobro razumjeli kako pretvoriti Niz prigovara se Datum Objekti koji koriste nove i stare API-je koje nudi jezgra Java, pogledajmo neke vanjske knjižnice.

4.1. Biblioteka Joda-Time

Alternativa jezgri Java Datum i Vrijeme knjižnica je Joda-Time. Iako autori sada preporučuju korisnicima migraciju na java.vrijeme (JSR-310) ako to nije moguće onda Joda-Time knjižnica pruža izvrsnu alternativu za rad s datumom i vremenom. Ova knjižnica pruža gotovo sve mogućnosti podržane u Javi 8 Datum vrijeme projekt.

Artefakt se može naći na Maven Central:

 joda-vrijeme joda-vrijeme 2.10 

Evo kratkog primjera rada sa standardom Datum vrijeme:

DateTimeFormatter formatter = DateTimeFormat.forPattern ("dd / MM / yyyy HH: mm: ss"); String dateInString = "07/06/2013 10:11:59"; DateTime dateTime = DateTime.parse (dateInString, formatter);

Pogledajmo i primjer eksplicitnog postavljanja vremenske zone:

DateTimeFormatter formatter = DateTimeFormat.forPattern ("dd / MM / yyyy HH: mm: ss"); String dateInString = "07/06/2013 10:11:59"; DateTime dateTime = DateTime.parse (dateInString, formatter); DateTime dateTimeWithZone = dateTime.withZone (DateTimeZone.forID ("Asia / Kolkata"));

4.2. Apache Commons Lang - DateUtils

The DateUtils razred pruža mnoge korisne uslužne programe koji olakšavaju rad s naslijeđem Kalendar i Datum predmeta.

Artefakt commons-lang3 dostupan je kod Maven Central:

 org.apache.commons commons-lang3 3.7 

Pretvorimo datum Niz pomoću an Polje uzoraka datuma u java.util.Datum:

String dateInString = "07 / 06-2013"; Datum datum = DateUtils.parseDate (dateInString, novi niz [] {"yyyy-MM-dd HH: mm: ss", "dd / MM-yyyy"});

5. Zaključak

U ovom smo članku ilustrirali nekoliko načina pretvaranja nizova u različite vrste Datum objekte (s vremenom i bez vremena), kako u običnoj Javi, tako i pomoću vanjskih knjižnica.

Cjeloviti izvorni kôd članka dostupan je na GitHubu.