1. ZonedDateTimeosztály
Van egy másik nagyon érdekes osztály a Date Time API-ban: az ZonedDateTimeosztály. Fő célja, hogy kényelmessé tegye a különböző időzónákban lévő dátumokkal való munkavégzést.
LocalDatekiválóan alkalmas dátumok ábrázolására. Például születésnapok. A születésnapom március 15-én van, függetlenül attól, hogy hol vagyok. Ez egy példa a dátumra.
LocalTimenagyszerű az idő leírására, mint az ébresztőórán beállított idő: 5:00-ra állítom az ébresztőt, és nem számít, hol vagyok. 5:00 az 5:00 óra. Ez egy példa az idővel való munkára.
Tegyük fel, hogy írunk egy alkalmazást, amely repülőjegyeket foglal le. A repülők a helyi idő szerint szállnak fel és érkeznek. A gép meghatározott ideig a levegőben van, de az időzónák változhatnak.
Időzónák
Az időzónák egyébként igazi káosz. És ha azt gondolja, hogy 24 időzóna létezik, akkor nagyot téved.
Például az indiai idő öt és fél órával különbözik a greenwichi középidőtől: GMT+5:30. Egyes országok átállnak a nyári időszámításra, mások pedig nem. Sőt, a különböző országok az év különböző szakaszaiban átállnak a nyári időszámításra.
Egyes országok pedig olyan törvényeket fogadnak el, amelyek eltörlik a nyári időszámítást, vagy újra bevezetik, vagy újra eltörlik.
Mindenesetre a világnak vannak időzónái, és minden időzónán belül egy idő van. A különböző zónákban az év bizonyos időszakaiban az idő egybeeshet, majd más időszakokban eltérhet. Az időzónákat általában a bennük található nagyobb városokról nevezik el: Europe/Monaco, Asia/Singapore, de vannak kivételek is — US/Pacific.
Hivatalosan jelenleg 599 időzóna létezik. Gondolj bele: 599. Ez messze nem 24. Üdvözöljük a globális világban.
A csomagból ZoneIdszármazó osztály java.timeegy időzóna tárolására szolgál Java nyelven.
Egyébként van egy statikus getAvailableZoneIds()metódusa, ami visszaadja az összes jelenleg ismert időzóna halmazát. Az összes zóna listájának megtekintéséhez meg kell írnia a következő kódot:
| Kód | Konzol kimenet (részleges) |
|---|---|
|
|
Ahhoz, hogy egy objektumot a neve alapján kapjon , a statikus módszert ZoneIdkell használnia ;of()
| Kód | jegyzet |
|---|---|
|
|
2. ZonedDateTimeObjektum létrehozása
Objektum létrehozásakor ZonedDateTimemeg kell hívni az osztály statikus now()metódusát, és át kell adni ZoneIdneki egy objektumot.
| Kód | Konzol kimenet |
|---|---|
|
|
Ha nem ad át ZoneIdobjektumot a metódusnak now()(és ez megengedett), akkor az időzóna automatikusan kerül meghatározásra a programot futtató számítógép beállításai alapján.
Példa:
| Kód | Konzol kimenet |
|---|---|
|
|
Globális dátum konvertálása helyi dátummá
Az egyik érdekes tulajdonsága, ZonedDateTimehogy képes helyi dátumra és időre konvertálni. Példa:
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);
LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();
3. Munka az idővel
LocalDateTimeAz osztályhoz hasonlóan az ZonedDateTimeosztálynak is számos módja van a dátum és idő egyes elemeinek lekérésére. Íme a módszerek listája:
|
Egy adott dátum évét adja vissza |
|
A dátum hónapját adja vissza: egy a több állandó közül –JANUARY, FEBRUARY, ...; |
|
A dátum hónapjának indexét adja vissza. január == 1 |
|
A hónap napjának indexét adja vissza |
|
A hét napját adja vissza: egy a számos állandó közül –MONDAY, TUESDAY, ...; |
|
Az év napjának indexét adja vissza |
|
Az órákat adja vissza |
|
Visszaadja a jegyzőkönyvet |
|
Visszaadja a másodperceket |
|
A nanoszekundumokat adja vissza |
Az összes metódus tökéletesen analóg az osztály metódusaival LocalDateTime. És természetesen az ZonedDateTimeosztálynak vannak olyan metódusai, amelyek lehetővé teszik a dátumok és időpontok kezelését. Ennek ellenére az objektum, amelyen a metódusokat meghívja, nem változik. Ehelyett egy új ZonedDateTimeobjektumot adnak vissza:
| Mód | Leírás |
|---|---|
|
Éveket ad a dátumhoz |
|
Hónapokat ad a dátumhoz |
|
Napokat ad a dátumhoz |
|
Órák hozzáadása |
|
Perceket ad hozzá |
|
Másodperceket ad hozzá |
|
Nanoszekundumokat ad hozzá |
|
Az éveket levonja a dátumból |
|
A hónapokat levonja a dátumból |
|
A napokat levonja a dátumból |
|
Kivonja az órákat |
|
Kivonja a perceket |
|
Kivonja a másodperceket |
|
Kivonja a nanoszekundumot |
Példákat nem mondunk, mivel úgy gondoljuk, hogy itt minden világos az imént vizsgált osztályokhoz hasonlóan.
GO TO FULL VERSION