1. Date
osztály és Unix idő
A Java kezdetétől fogva a nyelvnek van egy speciális osztálya az idők és dátumok kezelésére - Date
. Date
Idővel több óra is megjelent a dátumokkal való munkavégzéshez, de a programozók még ma is használják az osztályt.
Ez azért van, mert nagyon egyszerű és kényelmes. Programozóként pedig biztosan találkozni fog vele minden valós projektben. Az, hogy használod-e vagy sem, a te döntésed, de ezt tudnod kell. Tehát szánjon rá néhány percet értékes idejéből.
Mitől Date
olyan jó az osztály? Az egyszerűsége.
Az Date
osztály a dátum- és időinformációkat az 1970. január 1-je óta eltelt ezredmásodpercek számában tárolja . Ez sok ezredmásodperc, tehát a long
típust használják ezek tárolására.
Miért pont 1970 óta? Ez az úgynevezett Unix idő : így tartja az időt a Unix operációs rendszer, amely minden modern operációs rendszer nagyatyja.
De nagyon könnyen megtudhatja, mennyi idő telt el két dátum között: csak vonja le az egyik dátumot a másikból, és megkapja a dátumok közötti időkülönbséget ezredmásodperc pontossággal.
Íme néhány hasznos példa az Date
osztállyal való együttműködésre.
2. Az aktuális dátum lekérése
Az aktuális idő és dátum megtekintéséhez egyszerűen hozzon létre egy Date
objektumot. Minden új objektum tárolja a létrehozásának idejét. Nagyon egyszerűnek tűnik:
Date current = new Date();
A parancs végrehajtása után a current
változó tárol egy hivatkozást a létrehozott Date
objektumra, amely belsőleg tárolja a létrehozásának idejét – az 1970. január 1-je óta eltelt ezredmásodpercek számát.
Az aktuális dátum megjelenítése a képernyőn
Az aktuális dátum megjelenítéséhez egyszerűen: a) hozzon létre egy új Date
objektumot, b) nyomtassa ki a képernyőre a módszerrel System.out.println()
.
Példa:
Kód | Konzol kimenet |
---|---|
|
|
Íme, mit jelent a konzol kimenete:
Szöveg | Értelmezés |
---|---|
csütörtök rsday | csütörtök |
Február 21 | február 21 |
14:01:34 | óra : perc : másodperc |
EET | Időzóna: kelet-európai idő |
2019 | Év |
3. Konkrét dátum beállítása
Kitaláltuk, hogyan kapjuk meg az aktuális időt, de hogyan hozzunk létre egy Date
objektumot, amely más dátumot vagy időt tárol?
Itt megint minden egyszerű. Egy konkrét dátum beállításához a következő kódot kell beírnia:
Date birthday = new Date(year, month, day);
Minden egyszerű és kézenfekvő, de két árnyalattal kell tisztában lenni:
- Az évet 1900-tól kell számolni.
- A hónapok számozása nullától kezdődik.
Ez a Unix operációs rendszer másik öröksége: Unixon a programozók két számjeggyel jelölték az évet. 1977 helyett egyszerűen 77-et írtak. Tehát a 77 a helyes évszám, ha 1900-tól számolunk.
Például 1989. március 21-én születtem. Március a harmadik hónap, ezért le kell írnom:
Kód | Konzol kimenet |
---|---|
|
|
A hónapok nullától kezdődnek, de a napok nem. Ez egy kicsit furcsa, igaz?
Szerintünk az igazi programozóknak kellett volna érvényesülniük, és a hónap napjait is nulláról kellett volna számozni. Ó, ezek a konformisták 🙂
Konkrét időpont beállítása
Egy konkrét időpont beállítása is meglehetősen egyszerű: ehhez egy ilyen nyilatkozatot kell írnia:
Date birthday = new Date(year, month, day, hour, minutes, seconds);
Az órák, percek és másodpercek nullától kezdődően vannak számozva: hagyja, hogy a benned lévő programozó megkönnyebbülten fellélegezzen.
Példa:
Kód | Konzol kimenet |
---|---|
|
|
Az időt 12:15-re , a dátumot pedig 2005. június 4-re állítottuk be . Ezt egy nem programozónak kicsit nehéz elolvasni, de működik, ahogy kell.
4. Munka a dátum elemeivel
Többet is tehet egy tárggyal, Date
mint csupán megjeleníteni. Vannak olyan módszerek , amelyek lehetővé teszik a belsőleg tárolt dátum egyes elemeinek lekérését:
Módszer | Leírás |
---|---|
|
A dátum évét adja vissza 1900-hoz képest. |
|
A dátum hónapját adja vissza (a hónapok nullától kezdődően vannak számozva) |
|
A hónap napját adja vissza |
|
A hét napját adja vissza |
|
Az órákat adja vissza |
|
Visszaadja a jegyzőkönyvet |
|
Visszaadja a másodperceket |
Példa:
Kód | Konzol kimenet | jegyzet |
---|---|---|
|
|
2005. június a hónap napja, szombat |
Mellesleg, egy Date
objektum nemcsak a dátum egyes elemeinek lekérését, hanem azok módosítását is lehetővé teszi:
Módszer | Leírás |
---|---|
void setYear(int year) |
Módosítja a dátum évét. Az évszám 1900-hoz képest van feltüntetve. |
void setMonth(int month) |
Módosítja a dátum hónapját (a hónapok számozása nullától kezdődik) |
void setDate(int date) |
Módosítja a hónap napját |
void setHours(int hours) |
Módosítja az órákat |
void setMinutes(int minutes) |
Perceket változtat |
void setSeconds(int seconds) |
Másodpercenként változik |
5. Ezredmásodperc
Ahogy korábban említettük, az Date
objektum az 1970. január 1-je óta eltelt ezredmásodpercek számát tárolja.
Ha szükségünk van erre a számra, megkaphatjuk az objektumból Date
:
long time = date.getTime();
A getTime()
metódus az objektumban tárolt ezredmásodpercek számát adja vissza Date
.
Nem csak az ezredmásodpercek számát kaphatja meg, hanem megváltoztathatja ezt a számot egy meglévő objektumban:
Date date = new Date();
date.setTime(1117876500000L);
Egyébként ezt még tömörebben is megírhatod, ha az objektumnak Date
közvetlenül a létrehozáskor átadod az időt:
Date date = new Date(1117876500000L);
6. Dátumok összehasonlítása
Ha két dátumot szeretne összehasonlítani, és megtudja, melyik volt előbb, három lehetőség közül választhat
Az első módszer az, hogy egyszerűen összehasonlítjuk az egyes ezredmásodpercek számát:
if (date1.getTime() < date2.getTime())
A második módszerbefore()
az objektum metódusának használata Date
:
if (date1.before(date2))
Így hangzik: ha date1
előbb jön date2
, akkor...
A harmadik módszerafter()
egy objektum metódusának használata Date
:
if (date2.after(date1))
Így hangzik: ha date2
után van date1
, akkor...
7. DateFormat
osztály
Ne feledje, amikor a dátumot megjelenítettük a képernyőn, valami ilyesmit láttunk: Thu Feb 21 14:01:34 EET 2019
. Minden helyesnek tűnik, de a formátum inkább az, ahogyan a dátumot a programozók jelenítik meg, nem pedig a normál emberek. Szeretnénk világosabban megjeleníteni a dátumot a felhasználók számára. Valami ilyesmit Tuesday, February 21
.
És évszám nélkül. Vagy egy évvel, ha kell. Általánosságban elmondható, hogy különböző módokon szeretnénk megjeleníteni a dátumot.
Erre külön osztály van: SimpleDateFormat
.
Példa:
Kód |
---|
|
Konzol kimenet |
|
Nézd meg, mit jelenített meg a program: Jun-04-2005
. Ez egyáltalán nem az, ami volt.
A különbség az, hogy nem magát az objektumot jelenítettük meg Date
, hanem egy speciális karakterláncot, amelyet a metódus meghívásával kaptunk format()
egy objektumon SimpleDateFormat
. De itt még csak nem is ez a lényeg.
Az objektum létrehozásakor a karakterláncot paraméterként SimpleDateFormat
adtuk át . "MMM-dd-YYYY"
Ez a karakterlánc közvetíti a dátumformátumot, amelyet végül a konzol kimenetében láttunk.
- Az MMM a hónap nevének megjelenítését jelzi, három betűvel rövidítve
- A dd a hónap napjának megjelenítését jelzi
- Az YYYY azt jelzi, hogy az év négy számjeggyel jelenik meg
Ha a hónapot számként akarjuk kiadni, akkor a helyett a -t MMM
kell írnunk MM
, ami a mintát adja "MM-dd-YYYY"
. A képernyő kimenete a következő lesz06-04-2005
Erről az osztályról később részletesebben beszélünk.
8. Date.parse
módszer
Az Date
osztály más érdekes és hasznos dolgokkal is foglalkozhat – dátumot kaphat egy karakterláncból. Vagy ahogy a programozók mondják, képes elemezni egy karakterláncot.
parse()
Ennek speciális módszere van . Az elemzés így néz ki:
Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );
Egyébként ez a kód tömörebben is írható:
Date date = new Date("Jul 06 12:15:00 2019");
A karakterláncok elemzését más leckékben részletesebben megvizsgáljuk .
GO TO FULL VERSION