1. Váltás az Dateosztályról az Calendarosztályra
A programozók szerették az Dateosztá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" Dateosztá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 Calendarosztá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.
CalendarEzzel 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 Calendarhoz létre . CalendarA 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 Calendarosztá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);
GregorianCalendarIgen, minden alkalommal írni kell . A helyett Calendarírhat is GregorianCalendar– ez is működni fog. De az írás csak Calendarrö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 SimpleDateFormatobjektumot 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 Calendarobjektum könnyen objektummá alakítható Date, és már tudja, hogyan kell egy Dateobjektumot megjeleníteni. CalendarAz 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 Calendarosztály rendelkezik a get()metódussal. Ez egyetlen módszer, de vannak paraméterei:
int month = calendar.get(Calendar.MONTH);
Ahol calendaregy Calendarváltozó, és MONTHaz osztály állandó mezője Calendar.
Az osztály egyik Calendarkonstans 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 setkövetkező módszert:
calendar.set(Calendar.MONTH, value);
Ahol calendaregy Calendarváltozó, és MONTHaz osztály állandó mezője Calendar.
Amikor metódussal dolgozik set, az osztály egyik Calendarkonstans 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 |
Calendar5. Az osztály állandói
Az Calendarosztá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 Calendarobjektumban
Az Calendarosztá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 calendaregy Calendarváltozó, és MONTHaz osztály állandó mezője Calendar.
Amikor a metódussal dolgozik add, az osztály egyik konstans mezőjét adja meg Calendarelső 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 Calendara 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.
GO TO FULL VERSION