1. Váltás az Date
osztályról az Calendar
osztályra
A programozók szerették az Date
osztályt az egyszerűsége és a Unix szabványok támogatása miatt, de mint tudod, minden rózsának megvan a maga tövise.
A programozók "okos" Date
osztályt akartak. És megkapták, amit akartak az osztály formájában Calendar
. Úgy tervezték, hogy ne csak dátumokat tároljon, hanem nehéz műveleteket is végrehajtson a dátumokkal.
Az Calendar
osztály teljes neve java.util.Calendar. Ne felejtse el hozzáadni az importálási utasításhoz, ha úgy dönt, hogy használja a kódjában.
Calendar
Ezzel a paranccsal hozhat létre objektumot:
Calendar date = Calendar.getInstance();
Az osztály statikus getInstance()
metódusa az aktuális dátummal inicializált objektumot Calendar
hoz létre . Calendar
A kívánt naptár a programot futtató számítógép beállításai alapján készül el.
Pontosabban a naptár, amit kapsz... Ez azért van, mert az emberek a Földön nem korlátozódnak egyetlen naptárra. Ehelyett sokat használnak. És szinte mindegyik valamilyen valláshoz vagy országhoz kötődik. Az Calendar
osztály közülük 3-at támogat:
Naptár | Leírás |
---|---|
Gergely naptár | Keresztény Gergely-naptár |
Buddhista naptár | Buddhista naptár |
Japán császári naptár | Japán császári naptár |
De vannak kínai és arab naptárak is. Alapvetően az idővel dolgozni nem olyan egyszerű, mint amilyennek látszik.
A kínai naptárban a lecke írásakor az év hivatalosan 4716. És a muszlim naptár szerint az év 1398. Üdvözöllek a nagyvilágban, programozó barátom.
2. Naptárobjektum létrehozása
A Gergely-naptárt fogjuk használni, mivel ez a legelterjedtebb a világon. Legalábbis addig, amíg Kína meg nem vásárolja az Oracle-t, és a kínai naptárat nem teszi a fő naptárnak.
Bármilyen dátummal rendelkező naptárobjektumot létrehozhat egy ehhez hasonló utasítással:
Calendar date = new GregorianCalendar(year, month, day);
GregorianCalendar
Igen, minden alkalommal írni kell . A helyett Calendar
írhat is GregorianCalendar
– ez is működni fog. De az írás csak Calendar
rövidebb.
Az évet teljes egészében kell írni, pl. 2019 helyett nem írhat 19-et. A hónapok továbbra is nullától vannak számozva. De mint korábban, a hónap napjai nem nullától kezdődnek. Nerds!
Az idő és a dátum beállításához további argumentumként kell megadnia az időt:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
Szükség esetén akár ezredmásodpercben is átadhatja. Ezek a paraméterek a másodpercek száma után.
3. Naptárobjektum megjelenítése a képernyőn
Ha egyszerűen kinyomtat egy naptárobjektumot a képernyőre, nem lesz nagyon elégedett az eredménnyel.
Kód |
---|
|
Konzol kimenet |
|
Itt érdemes szem előtt tartani, hogy a naptár egy naptár, nem pedig egy dátum : mindenféle beállítással rendelkezik, amelyek mind megjelennek a képernyőn.
Helyénvaló lenne egy SimpleDateFormat
objektumot használni a naptár megjelenítéséhez, de amíg nem tanulmányozzuk, használhatja ezt az életet.
Date date = calendar.getTime();
Egy Calendar
objektum könnyen objektummá alakítható Date
, és már tudja, hogyan kell egy Date
objektumot megjeleníteni. Calendar
Az ehhez hasonló kóddal egy objektumot konvertálhat Date
:
A módszer használatával getTime()
:
Kód | Konzol kimenet |
---|---|
|
|
Ez egészen más kérdés, nem?
4. Munka a dátum elemeivel
A dátum egy adott elemének (pl. év, hónap, ...) lekéréséhez az Calendar
osztály rendelkezik a get()
metódussal. Ez egyetlen módszer, de vannak paraméterei:
int month = calendar.get(Calendar.MONTH);
Ahol calendar
egy Calendar
változó, és MONTH
az osztály állandó mezője Calendar
.
Az osztály egyik Calendar
konstans mezőjét argumentumként adjuk át a metódusnak get
, és eredményül megkapjuk a kívánt értéket.
Példák
Kód | Leírás |
---|---|
|
korszak (a közkorszak előtt vagy után) év hónap hónap hónap napja a hét napja óra perc másodperc |
Egy dátum elemének módosításához használja a set
következő módszert:
calendar.set(Calendar.MONTH, value);
Ahol calendar
egy Calendar
változó, és MONTH
az osztály állandó mezője Calendar
.
Amikor metódussal dolgozik set
, az osztály egyik Calendar
konstans mezőjét adja át első argumentumként, és az új értéket második argumentumként.
Példák
Kód | Leírás |
---|---|
|
év = 2019 hónap = július (0-tól számozva) 4. nap óra perc másodperc |
Calendar
5. Az osztály állandói
Az Calendar
osztály állandó mezői nem korlátozódnak a dátum elemeinek elnevezésére szolgáló mezőkre. Úgy tűnik, minden alkalomra vannak mezők.
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
Például vannak állandó mezők, amelyek hónapokra utalnak:
És a hét napjai is:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
Nem sorolunk fel mindent. Csak nem akarjuk, hogy meglepődjön, ha ilyen állandókat lát a kódban.
A konstansok használata jobban olvashatóvá teszi a kódot, ezért a programozók ezeket használják. A hónapok nullától kezdődően vannak számozva az olvashatóság javítása érdekében. Vagy nem.
6. Dátum módosítása egy Calendar
objektumban
Az Calendar
osztálynak van egy metódusa, amely lehetővé teszi, hogy intelligensebb módon kezelje a dátumot. Például hozzáadhat egy évet, egy hónapot vagy több napot egy dátumhoz. Vagy vigye el őket. Ezt a módszert hívják add()
. A vele való munka így néz ki:
calendar.add(Calendar.MONTH, value);
Ahol calendar
egy Calendar
változó, és MONTH
az osztály állandó mezője Calendar
.
Amikor a metódussal dolgozik add
, az osztály egyik konstans mezőjét adja meg Calendar
első argumentumként, második argumentumként pedig a hozzáadandó új értéket.
Ez egy másik intelligens módszer. Lássuk, mennyire okos:
Kód |
---|
|
Konzol kimenet |
|
Ez a módszer megérti, hogy 2019 februárjában csak 28 nap van, így az eredmény március 1.
Most vegyünk el 2 hónapot! Mit vegyünk? 2018. december 27.! Most ellenőrizzük.
Egy korábbi dátumot eredményező művelet végrehajtásához negatív értéket kell átadnia a metódusnak add()
:
Kód |
---|
|
Konzol kimenet |
|
Működik!
Ez a módszer figyelembe veszi a hónapok és a szökőévek eltérő hosszát. Összességében remek módszer. Pontosan erre van szüksége a legtöbb programozónak, aki dátumokkal dolgozik.
7. Egy dátum gördülő elemei
De néha vannak olyan helyzetek, amikor nem akarjuk ezt az okos viselkedést, például a randevú egy részéhez szeretne valamit tenni anélkül, hogy minden máson változtatna.
Az osztály rendelkezik erre Calendar
a speciális módszerrel. roll()
Aláírása olyan, mint a add()
metódusé, de ez a metódus a dátumnak csak egy elemét változtatja meg, a többi változatlan marad.
Példa:
Kód |
---|
|
Konzol kimenet |
|
Megváltoztattuk a hónapot, de az év és a dátum változatlan maradt.