logo

Java dátum és idő

A java.time, java.util, java.sql és java.text csomagok osztályokat tartalmaznak a dátum és az idő megjelenítésére. A következő osztályok fontosak a dátum kezeléséhez Java-ban.

Java 8 Date/Time API

A Java új Date and Time API-t vezetett be a Java 8 óta. A java.time csomag Java 8 Date and Time osztályokat tartalmaz.

Klasszikus dátum/idő API

De a klasszikus vagy régi Java Date API is hasznos. Lássuk a klasszikus dátum és idő osztályok listáját.

Dátum és idő formázása

A dátumot és az időt a következő osztályok használatával formázhatjuk Java nyelven:

Java dátum és idő API-k

A Java a dátum és az idő funkcióit két java.time és java.util csomag segítségével biztosítja. A Java 8-ban bevezetik a java.time csomagot, az újonnan bevezetett osztályok pedig az örökölt java.util.Date és java.util.Calendar osztályok hiányosságait próbálják kiküszöbölni.

Klasszikus dátumidő API osztályok

A Java 8 megjelenése előtti elsődleges osztályok a következők voltak:

hogyan lehet zenét letölteni

Java.lang.System: Az osztály biztosítja a currentTimeMillis() metódust, amely az aktuális időt ezredmásodpercben adja vissza. Az aktuális dátumot és időt ezredmásodpercben mutatja 1970. január 1-től.

java.util.Dátum: Ez az idő konkrét pillanatának megjelenítésére szolgál, ezredmásodperces egységben.

java.util.Calendar: Ez egy absztrakt osztály, amely módszereket biztosít a példányok közötti konvertáláshoz és a naptármezők különböző módon történő kezeléséhez.

java.text.SimpleDateFormat: Ez egy osztály, amelyet a dátumok formázására és elemzésére használnak előre meghatározott módon vagy felhasználó által meghatározott mintában.

java.util.TimeZone: Ez egy időzóna-eltolást jelent, és a nyári időszámítást is kiszámolja.

A meglévő dátum/idő API-k hátrányai

    A szál biztonsága:A meglévő osztályok, például a dátum és a naptár, nem biztosítanak szálbiztonságot. Emiatt nehezen hibakereshető párhuzamossági problémákhoz vezet, amelyekről a fejlesztőknek gondoskodniuk kell. A Java 8 új dátum és idő API-jai szálbiztonságot biztosítanak, és változtathatatlanok, így elkerülhető a fejlesztők párhuzamossági problémája.Rossz API tervezés:A klasszikus dátum és naptár API-k nem biztosítanak módszereket az alapvető napi funkciók végrehajtására. A Java 8-ban bevezetett Date és Time osztályok ISO-központúak, és számos különböző módszert biztosítanak a dátummal, időponttal, időtartammal és időszakokkal kapcsolatos műveletek végrehajtására.Nehéz időzóna kezelés:Az időzóna kezelése a klasszikus dátum és naptár osztályokkal nehéz, mert a fejlesztőknek kellett volna megírniuk a logikát. Az új API-kkal az időzóna-kezelés könnyen elvégezhető a Local és a ZonedDate/Time API-kkal.

Új Date Time API Java 8-ban

Az új dátum API segít leküzdeni a fent említett hátrányokat az örökölt osztályokkal kapcsolatban. A következő osztályokat tartalmazza:

java.time.LocalDate: Év-hónap-napot jelöl az ISO-naptárban, és hasznos a dátum idő nélküli ábrázolására. Használható csak dátumadatok megjelenítésére, például születési dátum vagy esküvő dátuma.

java.time.LocalTime: Csak időben foglalkozik. Hasznos az emberi alapú napszakok, például a filmes idők, vagy a helyi könyvtár nyitvatartási és zárási idejének megjelenítéséhez.

java.time.LocalDateTime: A dátumot és az időt is kezeli, időzóna nélkül. Ez a LocalDate és a LocalTime kombinációja.

java.time.ZonedDateTime: Egyesíti a LocalDateTime osztályt a ZoneId osztályban megadott zónainformációkkal. Ez egy teljes dátum-időbélyegzőt jelent az időzóna információival együtt.

java.time.OffsetTime: Az időt a Greenwich/UTC-től megfelelő időzóna-eltolással kezeli, időzónaazonosító nélkül.

java.time.OffsetDateTime: A dátumot és az időt a Greenwich/UTC-tól megfelelő időzóna-eltolásokkal kezeli, időzónaazonosító nélkül.

java.time.Clock: Hozzáférést biztosít az aktuális pillanathoz, dátumhoz és időhöz bármely adott időzónában. Bár az Óra osztály használata nem kötelező, ez a funkció lehetővé teszi számunkra, hogy teszteljük a kódot más időzónákra, vagy egy rögzített óra használatával, ahol az idő nem változik.

java.time.Instant : Ez egy nanoszekundum kezdetét jelenti az idővonalon (az EPOCH óta), és hasznos időbélyeg létrehozásához a gépi idő megjelenítésére. Az epocha előtt bekövetkező pillanat negatív értékű, a korszak után bekövetkező pillanat pedig pozitív értékű.

java.time.Duration : A két pillanat közötti különbség, amelyet másodpercben vagy nanoszekundumban mérnek, és nem használ dátumalapú konstrukciókat, például éveket, hónapokat és napokat, bár az osztály olyan módszereket biztosít, amelyek napokra, órákra és percekre konvertálják.

java.time.Period : A dátumok közötti különbség meghatározására szolgál dátum alapú értékekben (év, hónap, nap).

java.time.ZoneId: Meghatározza az időzóna azonosítóját, és szabályokat ad az Instant és a LocalDateTime közötti konvertáláshoz.

java.time.ZoneOffset: Leírja az időzóna eltolását a greenwichi/UTC időtől.

java.time.format.DateTimeFormatter: Különféle előre definiált formázókkal áll elő, vagy definiálhatjuk a sajátunkat. Parse() vagy format() metódussal rendelkezik a dátum és idő értékek elemzéséhez és formázásához.