1. Dateosztá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. DateIdő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 Dateolyan jó az osztály? Az egyszerűsége.

Az Dateosztá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 longtípust használják ezek tárolására.

Érdekes.

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 Dateosztá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 Dateobjektumot. 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 currentváltozó tárol egy hivatkozást a létrehozott Dateobjektumra, 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 Dateobjektumot, b) nyomtassa ki a képernyőre a módszerrel System.out.println().

Példa:

Kód Konzol kimenet
Date current = new Date();
System.out.println(current);
Thu Feb 21 14:01:34 EET 2019

Í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 Dateobjektumot, 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:

  1. Az évet 1900-tól kell számolni.
  2. A hónapok számozása nullától kezdődik.
Érdekes.

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
Date current = new Date(89, 2, 21);
System.out.println(current);
Tue Mar 21 00:00:00 EET 1989

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
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current);
Sat Jun 04 12:15:00 EEST 2005

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, Datemint 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
int getYear()
A dátum évét adja vissza 1900-hoz képest.
int getMonth()
A dátum hónapját adja vissza (a hónapok nullától kezdődően vannak számozva)
int getDate()
A hónap napját adja vissza
int getDay()
A hét napját adja vissza
int getHours()
Az órákat adja vissza
int getMinutes()
Visszaadja a jegyzőkönyvet
int getSeconds()
Visszaadja a másodperceket

Példa:

Kód Konzol kimenet jegyzet
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current.getYear());
System.out.println(current.getMonth());
System.out.println(current.getDate());
System.out.println(current.getDay());

105
5
4
6

2005.
június
a hónap napja,
szombat

Mellesleg, egy Dateobjektum 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 Dateobjektum 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 Datekö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 date1előbb jön date2, akkor...

A harmadik módszerafter() egy objektum metódusának használata Date:

if (date2.after(date1))

Így hangzik: ha date2után van date1, akkor...


7. DateFormatosztá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
Date current = new Date(105, 5, 4, 12, 15, 0);
SimpleDateFormat formatter = new SimpleDateFormat("MMM-dd-YYYY");
String message = formatter.format(current);
System.out.println(message);
Konzol kimenet
Jun-04-2005

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 SimpleDateFormatadtuk á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 MMMkell í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.parsemódszer

Az Dateosztá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 .