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.