W kolejnym artykule z serii języka Java, pokażę Ci jak przeprowadzić wykonywanie operacji na datach, takich jak przypisanie daty czy dodanie do wskazanej trzy tygodnie. Nauczysz się też prostej metody na obliczenie ile dokładnie dni minęło od podanej daty ✅. Zapraszam po odbiór wiedzy o klasie "Calendar" w języku Java 😊!
KLASA "CALENDAR" W JĘZYKU JAVA DROGĄ DO OPERACJI NA DATACH!
Aby zacząć działać na datach potrzebny nam jest obiekt typu "Calendar", jednak nie korzystamy z konstruktora:
Calendar calendar = new Calendar(); // błąd kompilacji
bo to klasa abstrakcyjna, tylko korzystamy z metody "getInstance":
Calendar calendar = Calendar.getInstance();
Zostało to zrobione po to, żeby automatycznie dopasować strefę czasową według ustawień regionalnych, jak również rodzaj kalendarza (tradycyjny lub gregoriański). Nic nie stoi na przeszkodzie, żeby przypisać strefę czasową lub rodzaj samodzielnie (można też oba naraz 🙂) - odsyłam do dokumentacji, jeśli masz ochotę poznać szczegóły 👌.
PRZYKŁADY OPERACJI
Pokażę teraz parę przykładów do czego klasa "Calendar" w języku Java jest zdolna 👇.
PRZYPISYWANIE DATY
W pierwszej kolejności warto przyswoić sobie metodę "set", która umożliwia przypisanie wartości dacie. Dla przykładu, poniższe wywołanie spowoduje przypisanie daty 6 sierpnia, 2000 roku:
calendar.set(2000, Calendar.AUGUST, 6);
Istnieje kilka przeciążonych wersji tej metody, które pozwalają wygodnie modyfikować pojedyncze składowe (zostały one opisane w dokumentacji Javy). Na przykład takie wywołanie spowoduje zmianę samego dnia na 24 sierpnia:
calendar.set(Calendar.DAY_OF_MONTH, 24);
Spójrz na zapisy "AUGUST" oraz "DAY_OF_MONTH" - to są wartości wbudowanego typu wyliczeniowego (o nich samych będzie w osobnym artykule). Nie tylko zalecane jest ich używać w ogóle, lecz także odpowiednie pola w odpowiednich miejscach. Niektóre IDE, takie jak "IntelliJIDEA" potrafią zidentyfikować niewłaściwe użycia i poinformować Cię o tym 👍.
POBIERANIE DATY
Należy wiedzieć, że data sięga nie do samego dnia, lecz nawet do sekundy 😯! Jeżeli skorzystasz z metody "getTime" i podstawisz do wywołania "println" (bądź "print"):
System.out.println(calendar.getTime());
to zobacz, że automatycznie przypisuje Ci aktualną godzinę z zegarka systemowego 😄.
WYLICZENIE RÓŻNICY W DNIACH
Ostatni przykład, który uważam za wyjątkowo interesujący 😎. "Calendar" w języku Java jest w stanie na podstawie drugiej podanej daty, wyznaczyć za Ciebie różnicę w liczbie dni, nawet z uwzględnieniem dni przestępnych i różnic w miesiącach 😊! Tak, weźmie pod uwagę, że luty co cztery lata ma 28 dni 😉! Zatem, dodaj sobie nowy kalendarz:
Calendar calendarB = Calendar.getInstance();
przypisz do niego osobną datę:
calendarB.set(2000, Calendar.AUGUST, 24);
a na końcu zdefiniuj sobie taką metodę:
public long amountOfDays(Date dateA, Date dateB) {
long a = dateA.getTime();
long b = dateB.getTime();
long difference = b - a;
int msInSecond = 1000;
int seconds = 60;
int minutes = 60;
int days = 24;
int division = msInSecond*seconds*minutes*days;
return difference / division;
}
i wypisz na wyjściu:
System.out.println("Liczba dni: " + amountOfDays(calendarA.getTime(), calendarB.getTime()));
"Calendar.getTime" zwraca obiekt typu "Date", o którym pisałem już wcześniej. Może nie jest to najprostsza droga, aczkolwiek pokazuje do jakiej konwersji trzeba dojść z milisekund na doby 😁. Gdyby była potrzebna bardziej elegancka wersja, to można wykonać to samo również w ten sposób:
public long amountOfDays(Date dateA, Date dateB) {
long a = dateA.getTime();
long b = dateB.getTime();
long difference = b - a;
return TimeUnit.DAYS.convert(difference, TimeUnit.MILLISECONDS);
}
Skrótem jest "TimeUnit.DAYS.convert" 😜. Wystarczy tylko dodać import pakietu u góry:
import java. util.concurrent.TimeUnit;
i już 😉!
Klasa "Calendar" umożliwia wykonywanie operacji na datach, takich jak przypisanie pojedynczych składowych (sekund, tygodni itp.) czy zwrócenie czasu w milisekundach, co przydaje się do operacji wyznaczania czasu jaki dzieli obie daty.
Tyle informacji wystarczy, a jeżeli Cię interesują głębsze zakątki klasy "Calendar" w języku Java, zapraszam do dokumentacji ✅. Z mojej strony wszystko, udanych konwersji 😃!