1. Trecerea de la Date
clasă la Calendar
clasă
Programatorii au iubit Date
clasa pentru simplitate și suport pentru standardele Unix, dar după cum știți, fiecare trandafir are spinii lui.
Programatorii doreau o Date
clasă „inteligentă”. Și au obținut ceea ce și-au dorit sub forma clasei Calendar
. A fost conceput ca o modalitate nu numai de a stoca datele, ci și de a efectua operațiuni dificile cu datele.
Numele complet al Calendar
clasei este java.util.Calendar. Nu uitați să îl adăugați la o instrucțiune de import dacă decideți să îl utilizați în cod.
Puteți crea un Calendar
obiect cu această comandă:
Calendar date = Calendar.getInstance();
Metoda statică getInstance()
a Calendar
clasei creează un Calendar
obiect inițializat cu data curentă. Calendarul dorit va fi creat pe baza setărilor computerului care rulează programul.
Sau mai exact, calendarul pe care îl primiți... Asta pentru că oamenii de pe Pământ nu sunt limitați la un singur calendar. În schimb, folosesc multe. Și aproape fiecare dintre ele este asociat cu o religie sau o țară. Clasa Calendar
sprijină 3 dintre ele:
Calendar | Descriere |
---|---|
Calendar gregorian | Calendarul creștin gregorian |
Calendarul budist | Calendar budist |
Calendarul Imperial Japonez | Calendarul imperial japonez |
Există însă și calendare chinezești și arabe. Practic, lucrul cu timpul nu este atât de ușor pe cât pare.
În calendarul chinezesc, anul este oficial 4716 la momentul scrierii acestei lecții. Și conform calendarului musulman, anul este 1398. Bun venit în lumea mare, prietene programator.
2. Crearea unui obiect calendar
Vom folosi calendarul gregorian, deoarece este cel mai comun din lume. Cel puțin până când China cumpără Oracle și face ca calendarul chinezesc să fie cel principal.
Puteți crea un obiect calendar cu orice dată folosind o declarație ca aceasta:
Calendar date = new GregorianCalendar(year, month, day);
Da, trebuie să scrii GregorianCalendar
de fiecare dată. În loc de Calendar
, puteți scrie GregorianCalendar
, de asemenea, asta va funcționa. Dar scrisul Calendar
este mai scurt.
Anul trebuie scris în întregime, de exemplu, nu puteți scrie 19 în loc de 2019. Lunile sunt încă numerotate de la zero. Dar, ca și înainte, zilele lunii nu sunt numărate de la zero. Tocilari!
Pentru a seta ora și data, trebuie să introduceți ora ca argumente suplimentare:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
Puteți chiar trece în milisecunde dacă este necesar. Sunt parametrul după numărul de secunde.
3. Afișarea unui obiect calendar pe ecran
Dacă pur și simplu imprimați un obiect calendar pe ecran, nu veți fi foarte mulțumit de rezultat.
Cod |
---|
|
Ieșire de consolă |
|
Lucrul de reținut aici este că un calendar este un calendar, nu o dată : are tot felul de setări care vor fi toate afișate pe ecran.
Ar fi potrivit să folosiți un SimpleDateFormat
obiect pentru a afișa un calendar, dar până când îl studiem, puteți folosi acest hack de viață.
Date date = calendar.getTime();
Un Calendar
obiect poate fi ușor convertit într-un Date
obiect și știți deja cum să afișați un Date
obiect. Puteți utiliza cod ca acesta pentru a converti un Calendar
obiect într-un Date
:
Folosind getTime()
metoda:
Cod | Ieșire de consolă |
---|---|
|
|
Este o chestiune cu totul diferită, nu-i așa?
4. Lucrul cu elemente ale unei date
Pentru a obține un element specific al unei date (ex. anul, luna, ...), clasa Calendar
are get()
metoda. Este o singură metodă, dar are parametri:
int month = calendar.get(Calendar.MONTH);
Unde calendar
este o Calendar
variabilă și MONTH
este un câmp constant al Calendar
clasei.
Treceți unul dintre Calendar
câmpurile constante ale clasei ca argument metodei get
și obțineți valoarea dorită ca rezultat.
Exemple
Cod | Descriere |
---|---|
|
era (înainte sau după era comună) an luna ziua lunii ziua săptămânii ore minute secunde |
Pentru a schimba un element al unei date, utilizați set
metoda:
calendar.set(Calendar.MONTH, value);
Unde calendar
este o Calendar
variabilă și MONTH
este un câmp constant al Calendar
clasei.
Când lucrați cu set
metoda, treceți unul dintre Calendar
câmpurile constante ale clasei ca prim argument și noua valoare ca al doilea argument.
Exemple
Cod | Descriere |
---|---|
|
an = 2019 luna = iulie (numerotat de la 0) a 4-a zi ore minute secunde |
5. Constantele Calendar
clasei
Câmpurile constante ale Calendar
clasei nu sunt limitate la cele pentru denumirea elementelor unei date. Se pare că există câmpuri pentru fiecare ocazie.
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
De exemplu, există câmpuri constante pentru a face referire la luni:
Și, de asemenea, zilele săptămânii:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
Nu vom enumera totul. Doar nu vrem să fii surprins dacă vezi constante ca aceasta în cod.
Folosirea constantelor face codul mai lizibil, motiv pentru care programatorii le folosesc. Și lunile sunt numărate de la zero, de asemenea, pentru a îmbunătăți lizibilitatea. Sau nu.
6. Modificarea datei într-un Calendar
obiect
Clasa Calendar
are o metodă care vă permite să operați la o întâlnire în moduri mai inteligente. De exemplu, puteți adăuga un an, o lună sau câteva zile la o dată. Sau ia-le. Această metodă se numește add()
. Lucrul cu el arată astfel:
calendar.add(Calendar.MONTH, value);
Unde calendar
este o Calendar
variabilă și MONTH
este un câmp constant al Calendar
clasei.
Când lucrați cu add
metoda, treceți unul dintre Calendar
câmpurile constante ale clasei ca prim argument și ca al doilea argument - noua valoare care trebuie adăugată.
Aceasta este o altă metodă inteligentă. Să vedem cât de inteligent este:
Cod |
---|
|
Ieșire de consolă |
|
Această metodă înțelege că în februarie 2019 sunt doar 28 de zile, deci data rezultată este 1 martie.
Acum hai să luăm 2 luni! Ce ar trebui să obținem? 27 decembrie 2018! Să verificăm acum.
Pentru a efectua o operație care are ca rezultat o dată anterioară, trebuie să transmiteți o valoare negativă metodei add()
:
Cod |
---|
|
Ieșire de consolă |
|
Funcționează!
Această metodă ia în considerare duratele diferite ale lunilor, precum și anii bisecți. Una peste alta, o metodă grozavă. Este exact ceea ce au nevoie majoritatea programatorilor care lucrează cu date.
7. Elementele rulante ale unei date
Dar uneori există situații în care nu dorim acest comportament inteligent, de exemplu, vrei să faci ceva pentru o parte a întâlnirii fără a schimba totul.
Clasa Calendar
are metoda specială roll()
pentru aceasta. Semnătura sa este la fel ca add()
metoda, dar această metodă modifică doar un element al datei, lăsând restul neschimbat.
Exemplu:
Cod |
---|
|
Ieșire de consolă |
|
Am schimbat luna, dar anul și data au rămas neschimbate.
GO TO FULL VERSION