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.