1. Przejście z klasy Date
do klasyCalendar
Programiści pokochali tę klasę Date
za jej prostotę i obsługę standardów Unix, ale jak wiesz, nasze słabości są przedłużeniem naszych mocnych stron.
Programiści chcieli mieć „inteligentną klasę Date
”. I taka klasa się pojawiła: stała się klasą Calendar
. Został pomyślany jako narzędzie nie tylko do przechowywania, ale także do kompleksowej pracy z datami.
W pełni kwalifikowana nazwa klasy Calendar
to java.util.Calendar. Nie zapomnij dodać go do importu, jeśli zdecydujesz się użyć go w swoim kodzie.
Możesz utworzyć obiekt Calendar
za pomocą polecenia:
Calendar date = Calendar.getInstance();
Metoda getInstance()
klasy statycznej Calendar
utworzy obiekt Calendar
zainicjowany bieżącą datą. W zależności od ustawień komputera, na którym uruchomiony jest program, zostanie utworzony żądany kalendarz.
Bardziej poprawne byłoby stwierdzenie - obecny. Faktem jest, że na Ziemi nie ma jednego, ale wiele kalendarzy. I prawie każdy z nich jest związany z jakąś religią lub krajem. Klasa Calendar
obsługuje 3 z nich:
Kalendarz | Opis |
---|---|
Kalendarz gregoriański | Chrześcijański kalendarz gregoriański |
kalendarz buddyjski | Kalendarz buddyjski |
Japoński kalendarz cesarski | Japoński kalendarz cesarski |
Ale są też kalendarze chińskie i arabskie. Ogólnie rzecz biorąc, praca z czasem nie jest tak łatwa, jak się wydaje.
W Chinach w momencie pisania tego wykładu oficjalnie jest rok 4716. A według kalendarza muzułmańskiego - 1398. Witaj w wielkim świecie, przyjacielu programiście.
2. Utwórz obiekt kalendarza
Będziemy używać kalendarza gregoriańskiego jako najpopularniejszego na świecie. Przynajmniej dopóki Chiny nie kupią Oracle i nie uczynią swojego kalendarza głównym.
Obiekt kalendarza z dowolną datą jest tworzony za pomocą polecenia:
Calendar date = new GregorianCalendar(год, месяц, день);
Tak, za każdym razem musisz pisać GregorianCalendar
. Zamiast tego możesz także Calendar
napisać GregorianCalendar
: to również zadziała. Ale Calendar
mów krótko.
Rok należy wpisać w całości: nr 19 zamiast 2019. Miesiące nadal są liczone od zera. A dni miesiąca są nadal liczone nie od zera (słabowianki!).
Aby ustawić nie tylko datę, ale także godzinę, musisz przekazać je jako dodatkowe parametry:
... = new GregorianCalendar(год, месяц, день, часы, minutyы, секунды);
W razie potrzeby możesz nawet podać milisekundy: są one określane jako następny parametr po sekundach.
3. Wyświetlenie obiektu kalendarza na ekranie
Jeśli po prostu wyświetlisz obiekt kalendarza na ekranie, nie będziesz zadowolony z wyniku.
Kod |
---|
|
Wyjście na wyświetlaczu |
|
Chodzi o to, że kalendarz to tylko kalendarz, a nie data : ma wiele różnych ustawień i wszystkie są wyświetlane na ekranie.
Prawidłowe będzie wyświetlanie obiektu kalendarza za pomocą klasy SimpleDateFormat
, ale dopóki go nie przestudiujemy, możesz użyć life hacka.
Date date = calendar.getTime();
Faktem jest, że obiekt typu Calendar
można łatwo przekonwertować na obiekt typu i już wiesz, Date
jak wyświetlić obiekt typu . Date
Coś takiego może przekonwertować obiekt Calendar
na Date
:
Użycie metody getTime()
:
Kod | Wyjście na wyświetlaczu |
---|---|
|
|
Całkiem inna sprawa, prawda?
4. Praca z fragmentami dat
Aby uzyskać fragment daty (rok, miesiąc, ...), klasa Calendar
ma specjalną metodę - get()
. Jedna metoda, ale z parametrami:
int month = calendar.get(Calendar.MONTH);
Gdzie calendar
jest zmienną typu Calendar
i MONTH
jest zmienną stałą klasy Calendar
.
get
Przekazujesz specjalną stałą klasy jako parametr do metody Calendar
, w wyniku czego otrzymujesz pożądaną wartość.
Przykłady
Kod | Opis |
---|---|
|
era (pne lub później) rok miesiąc dzień miesiąca dzień tygodnia godziny minuty sekundy |
Poniższa metoda służy do zmiany fragmentu daty set
:
calendar.set(Calendar.MONTH, oznaczający);
Gdzie calendar
jest zmienną typu Calendar
i MONTH
jest zmienną stałą klasy Calendar
.
set
Przekazujesz specjalną stałą klasy jako pierwszy parametr do metody Calendar
i nową wartość jako drugi parametr.
Przykłady
Kod | Opis |
---|---|
|
rok = 2019 miesiąc = lipiec (numerowane od 0) 4 godziny minuty sekundy |
5. Stałe klasoweCalendar
Klasa Calendar
ma stałe nie tylko dla nazw fragmentów dat, ale wydaje się, że na każdą okazję.
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
Na przykład istnieją stałe oznaczające miesiące:
Lub na przykład dla dni tygodnia:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("Это пятница");
}
Nie wymienimy wszystkiego. Chcemy tylko, abyś nie był zaskoczony, jeśli zobaczysz takie wpisy w kodzie.
Używanie stałych sprawia, że kod jest bardziej czytelny, dlatego programiści je dodali. Cóż, miesiące są również ponumerowane od zera, ze względu na czytelność. Albo nie.
6. Zmień datę w obiekcieCalendar
Klasa Calendar
ma metodę, która pozwala na wykonywanie inteligentniejszych operacji na dacie. Na przykład dodaj rok, miesiąc lub kilka dni do daty. Albo zabrać. Ta metoda nazywa się add()
. Wygląda na to, że praca z nim wygląda tak:
calendar.add(Calendar.MONTH, oznaczający);
Gdzie calendar
jest zmienną typu Calendar
i MONTH
jest zmienną stałą klasy Calendar
.
add
Przekazujesz stałą klasy specjalnej jako pierwszy parametr do metody Calendar
, a wartość, która ma zostać dodana jako drugi parametr.
Osobliwością tej metody jest to, że jest inteligentna. Zobaczmy, jak:
Kod |
---|
|
Wyjście na wyświetlaczu |
|
Ta metoda zakłada, że luty 2019 ma tylko 28 dni, a ostateczną datą jest 1 marca.
Teraz weźmy 2 miesiące! Co powinno się stać? 27 grudnia 2018! Teraz sprawdźmy.
Aby wykonać akcję skracającą datę, należy add()
przekazać do metody wartość ze znakiem ujemnym:
Kod |
---|
|
Wyjście na wyświetlaczu |
|
Pracuje!
Ta metoda uwzględnia długości miesięcy i lata przestępne. W sumie świetna metoda. Dokładnie to, czego potrzebuje większość programistów, którzy ściśle współpracują z datami.
7. Przewijanie fragmentów daty
Ale czasami zdarzają się sytuacje, w których takie sprytne zachowanie jest niepotrzebne: chcesz zrobić coś z jedną częścią daty, nie zmieniając wszystkiego innego.
W tym celu klasa Calendar
ma specjalną metodę - roll()
. Swoją sygnaturą jest całkowicie podobny do metody add()
, ale wszelkie zmiany za jej pomocą wpływają na jeden parametr, reszta pozostaje niezmieniona.
Przykład:
Kod |
---|
|
Wyjście na wyświetlaczu |
|
Zmieniliśmy miesiąc, ale rok i data pozostały niezmienione.