
– Cześć, Amigo. Opowiem Ci o interesującym typie zwanym Date. Ten typ przechowuje datę i czas i może również mierzyć interwały czasu.
– Brzmi interesująco. Proszę, kontynuuj.
– Każdy obiekt Date przechowuje czas w dość ciekawej formie: liczba milisekund od 1 stycznia, 1970 roku GMT.
– Wow!
– Tak. Ta liczba jest tak ogromna, że nie ma wystarczająco dużo miejsca na nią w int, dlatego musi być przechowywana w long. Ale jest ona bardzo przydatna do obliczania różnicy między dwiema dowolnymi datami. Wykonujesz jedynie odejmowanie, by znaleźć różnicę z dokładnością do milisekund. Rozwiązuje to również problem linii zmiany daty oraz czasu letniego.
– Najbardziej interesującą częścią jest to, że każdy obiekt jest inicjalizowany w bieżącym czasie swojego powstania. Aby poznać aktualny czas, musisz po prostu utworzyć obiekt Date.
– Jak z tym pracować?
– Oto kilka przykładów:
public static void main(String[] args) throws Exception
{
Date dzisiaj = new Date();
System.out.println("Aktualna data: " + dzisiaj);
}
public static void main(String[] args) throws Exception
{
Date czasBiezacy = new Date(); // Pobiera bieżącą datę i godzinę
Thread.sleep(3000); // Czeka 3 sekundy (3000 millisekundy)
Date nowyCzas = new Date(); // Pobiera nowy bieżący czas
long opoznienieWms = nowyCzas.getTime() - czasBiezacy.getTime(); // Oblicza różnicę
System.out.println("Różnica czasu wynosi: " + opoznienieWms + " w ms");
}
public static void main(String[] args) throws Exception
{
Date czasPoczatkowy = new Date();
long czasKoncowy = czasPoczatkowy.getTime() + 5000; // +5 sekund
Date dataKoncowa = new Date(czasKoncowy);
Thread.sleep(3000); // Zaczekaj 3 sekundy
Date czasBiezacy = new Date();
if(czasBiezacy.after(dataKoncowa))// Sprawdza czy czasBiezacy jest po dataKoncowa (czy czas aktualny jest później niż data końcowa)
{
System.out.println("Czas końcowy!");
}
}
public static void main(String[] args) throws Exception
{
Date czasBiezacy = new Date();
int godziny = czasBiezacy.getHours();
int minuty = czasBiezacy.getMinutes();
int sekundy = czasBiezacy.getSeconds();
System.out.println("Czas, który upłynął od północy " + godziny + ":" + minuty + ":" + sekundy);
}
public static void main(String[] args) throws Exception
{
Date czasPoczatkowyRoku = new Date();
czasPoczatkowyRoku.setHours(0);
czasPoczatkowyRoku.setMinutes(0);
czasPoczatkowyRoku.setSeconds(0);
czasPoczatkowyRoku.setDate(1); // Pierwszy dzień miesiąca
czasPoczatkowyRoku.setMonth(0); // Styczeń (miesiące indeksowane są zaczynając od 0 do 11)
Date czasBiezacy = new Date();
long roznicaCzasuWms = czasBiezacy.getTime() - czasPoczatkowyRoku.getTime();
long dzienWms = 24 * 60 * 60 * 1000; // Liczba milisekund w 24 godzinach
int licznikDni = (int) (roznicaCzasuWms/dzienWms; // Liczba pełnych dni
System.out.println("Liczba dni, które upłynęły od początku roku: " + licznikDni);
}
– Metoda getTime()
zwraca liczbę milisekund przechowywanych w obiekcie Date.
– Metoda after()
sprawdza, czy data, na której wywołaliśmy metodę, następuje po dacie przekazanej do metody.
– Metody getHours(), getMinutes(), getSeconds()
zwracają odpowiednio liczbę godzin, minut i sekund dla obiektu, na którym zostały wywołane.
– Zauważ, że w ostatnim przykładzie możesz zmienić datę/czas przechowywany w obiekcie Date. Otrzymujemy bieżący czas i datę i następnie resetujemy godziny, minuty i sekundy do 0. Określamy również styczeń jako miesiąc numer i 1 jako dzień miesiąca. Tym samym, obiekt czasPoczatkowyRoku
przechowuje datę 1 stycznia bieżącego roku i czas 00:00:00.
– Następnie ponownie sprawdzamy bieżącą datę (czasBiezacy
), obliczamy różnicę między dwiema datami w milisekundach i przechowujemy ją w roznicaCzasuWms
.
– Następnie dzielimy roznicaCzasuWms
przez liczbę milisekund w ciągu 24 godzin, by otrzymać liczbę pełnych dni od początku roku do dzisiaj.
– Wow! To jest świetne!
GO TO FULL VERSION