1. ZonedDateTime
osztály
Van egy másik nagyon érdekes osztály a Date Time API-ban: az ZonedDateTime
osztá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.
LocalDate
kivá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.
LocalTime
nagyszerű 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 ZoneId
származó osztály java.time
egy 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 ZoneId
kell használnia ;of()
Kód | jegyzet |
---|---|
|
|
2. ZonedDateTime
Objektum létrehozása
Objektum létrehozásakor ZonedDateTime
meg kell hívni az osztály statikus now()
metódusát, és át kell adni ZoneId
neki egy objektumot.
Kód | Konzol kimenet |
---|---|
|
|
Ha nem ad át ZoneId
objektumot 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, ZonedDateTime
hogy 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
LocalDateTime
Az osztályhoz hasonlóan az ZonedDateTime
osztá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 ZonedDateTime
osztá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 ZonedDateTime
objektumot 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