Czy wiecie jakie Java posiada możliwości obsługi dat i kalendarzy? Są takie dwie klasy, które można w miarę szybko opanować. Są to "Date" oraz "Calendar". Daty w Javie mogą podlegać operacjom arytmetycznym w stylu "odejmij 80 dni od bieżącej daty" otrzymując w ten sposób całkowicie poprawną kalkulację z uwzględnieniem dni przestępnych oraz regionu w jakim się aktualnie znajdujemy. Interesuje Was dalszy ciąg?

DATY W JAVIE OD STRONY KODOWEJ

Przytoczyłem dwie konkretne klasy stanowiące podstawę w zakresie obliczania i wydobywania dat (bądź tylko jej konkretnej części), "Date" i "Calendar". Powodem dla którego podałem dwie a nie jedną jest taki, iż "Date" znajdzie swoje zastosowanie głównie przy pobraniu bieżącej daty według kalendarza w systemie operacyjnym, a "Calendar" świetnie się sprawi przy obliczaniu pożądanej przez nas daty poprzez dodawanie lub odejmowanie dni, tygodni czy nawet lat.

Aby w ogóle znaleźć pożytek przy korzystaniu z wyżej wymienionych klas, daty w Javie wymagają formatowania łańcuchów znaków za pomocą metody "String.format". Omawiałem je już wcześniej więc od tej pory zakładam, że umiecie już z tego korzystać. Skorzystamy sobie z obu tych klas do wyznaczania dat i porównamy sobie ich możliwości.

DATY W JAVIE. KLASA "DATE"

"Date" to klasa należąca do rodziny pakietów "java. util.Date". Samo jej użycie jest banalne bowiem wystarczy utworzyć instancję klasy "Date":

Date date = new Date();

a następnie wypisać na terminal:

System.out.println(date);

W taki sposób otrzymamy na strumień wyjściowy pełną datę ze szczegółami, tylko że przedstawione chaotycznie. Aby daty w Javie wyglądały nieco ładniej, można skorzystać ze specyfikatorów formatu i podstawić do łańcucha sterującego funkcji "printf" albo "String.format" jak kto woli. Na przykład można skorzystać z daty w następujący sposób:

String s = String.format("%td %<tB, %<tA", date);

System.out.println(s);

Wówczas otrzymamy datę w postaci numeru dnia miesiąca, nazwy miesiąca oraz dnia tygodnia po przecinku. To już dużo czytelniejsza postać. Zwróćcie uwagę, że w tym przypadku wypisuje odpowiednio nazwy dni i miesięcy według obowiązującego języka na obecnie uruchamianym systemie operacyjnym.

To są najbardziej podstawowe modyfikatory dla klasy "Date" i "Calendar":

  • %tA - nazwa tygodnia
  • %tB - nazwa miesiąca
  • %tc - pełna data i godzina
  • %td - numer dnia miesiąca
  • %tr - sama godzina

DATY W JAVIE. KLASA "CALENDAR"

"Calendar" to druga część niniejszego artykułu. Z tej klasy korzystacie do operacji na datach niż na wyznaczaniu i formatowaniu obecnej. Jak wspomniałem, dzięki temu możecie wykonywać dodawanie i odejmowanie na pobranej lub ustalonej przez siebie dacie. Na przykład można sprawić, żeby od obecnej daty odjąć 131 dni i przekonać się jaka wtedy będzie data uwzględniając dni przestępne oraz inne szczegółowe czynniki!

Oto wygląd instancji klasy "Calendar" (po zaimportowaniu pakietu "java. util.Calendar":

Calendar calendar = Calendar.getInstance();

Tym razem nie tworzymy nowego obiektu, gdyż jest to klasa abstrakcyjna. Zamiast tego pobieramy jedną z klas potomnych. Zostało to skonstruowane w celu pobierania odpowiedniego kalendarza na podstawie naszej lokalizacji. Domyślny typ to kalendarz gregoriański. Od tej pory możemy wywoływać metody ustawiające konkretną datę lub dodające do niej określony przedział czasowy.

Ograniczę się do zaledwie kilku przykładów, gdyż daty w Javie mogą podlegać modyfikacjom od naprawdę wielu metod w obu wyżej wymienionych klasach. Metoda "set" pozwala wygodnie ustawiać rok, miesiąc (można też podać liczbę liczoną od zera jako styczeń), dzień, a nawet minutę i godzinę:

calendar.set(2013, Calendar.MAY, 30);

Kalendarz udostępnia Wam również wielokrotnie wspomniane "dodawanie" do daty. Wystarczy dodać wywołanie "add", oto przykładowe użycie:

calendar.add(Calendar.DAY_OF_MONTH, 56);

To sprawi dodanie określonej liczby dni do aktualnej daty i jeśli przekroczy ona pozostałą liczbę dni przed upłynięciem danego miesiąca, to "przejdzie" do następnego. Możecie też użyć metody "roll":

calendar.roll(Calendar.DAY_OF_MONTH, 7);

i w tym przypadku daty w Javie będą zachowywać się tak jak przy operacji "modulo", czyli w momencie przekroczenia dni miesiąca na którym "stoi", następuje powrót do pierwszego dnia. Dla przykładu, jeśli obecny dzień miesiąca to 27, a jest ich 30 maksymalnie, to wywołanie "roll" z przesunięciem o sześć dni spowoduje ustawienie na trzeci dzień.

Jest tego o wiele więcej więc na tym zakończę i odwołam Was do dokumentacji Javy na temat jednej i drugiej klasy.


To by było tyle, dziękuję za przeczytanie!

PODOBNE ARTYKUŁY