1. Przejście z klasy Datedo klasyCalendar

Programiści pokochali tę klasę Dateza 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 Calendarto java.util.Calendar. Nie zapomnij dodać go do importu, jeśli zdecydujesz się użyć go w swoim kodzie.
Możesz utworzyć obiekt Calendarza pomocą polecenia:
Calendar date = Calendar.getInstance();
Metoda getInstance()klasy statycznej Calendarutworzy obiekt Calendarzainicjowany 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 Calendarobsł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 Calendarnapisać GregorianCalendar: to również zadziała. Ale Calendarmó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 Calendarmożna łatwo przekonwertować na obiekt typu i już wiesz, Datejak wyświetlić obiekt typu . DateCoś takiego może przekonwertować obiekt Calendarna 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 Calendarma specjalną metodę - get(). Jedna metoda, ale z parametrami:
int month = calendar.get(Calendar.MONTH);
Gdzie calendar jest zmienną typu Calendari 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 Calendari MONTH jest zmienną stałą klasy Calendar.
set Przekazujesz specjalną stałą klasy jako pierwszy parametr do metody Calendari 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 Calendarma 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 Calendarma 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 Calendari 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 Calendarma 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.
GO TO FULL VERSION