CodeGym /Kursy /Składnia Java /Wprowadzenie do typu Date [pol. Data]

Wprowadzenie do typu Date [pol. Data]

Składnia Java
Poziom 8 , Lekcja 4
Dostępny
Wprowadzenie do typu Date - 1

– 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:

Sprawdź bieżącą datę:
public static void main(String[] args) throws Exception
{
     Date dzisiaj = new Date();
     System.out.println("Aktualna data: " + dzisiaj);
}
Oblicz różnicę między dwiema datami
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");
}
Sprawdzenie, czy upłynął pewien określony czas:
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!");
    }
}
Ustal, jak dużo czasu minęło od początku dnia:
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);
}
Ustal, jak wiele dni minęło od początku roku:
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!

Komentarze (9)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
kacper Poziom 9, Wrocław, Polska
13 stycznia 2024
nadal nieaktualne! :/
Anonymous #11173529 Poziom 29, Radoslaw, Poland
27 marca 2023
To nie jest już aktualna wiedza
Kubańczyk92 Poziom 35, Wroclaw, Poland
7 kwietnia 2022
Klasa Date została wprowadzona w pierwszej wersji Javy i od początku były z nią problemy(np miesiąc z zakresu 0-11) dlatego korzystano z zew bibliotek gdy pracowało się na datach. Obecnie większość konstruktorów i metod z tej klasy jest oznaczona jako "depracated". Za ponowne uporządkowanie dat i czasu wzięto się od Javy 8 i wprowadzono tam klasy LocalTime i LocalDate. Nie wiem dlaczego artykuł nawiązuje do przestarzałej klasy a nie do nowej...
Sebastian staniszewski Poziom 16, Warsaw
22 kwietnia 2021
Ustal, jak wiele dni minęło od początku roku: w 15 linijce brakuje nawiasu zamykającego
Robert Poziom 20, Debica, Poland
19 maja 2021
Tomek Poziom 8, United Kingdom
24 września 2022
Popatrz minęło półtorej roku i dalej go brakuje :-)
iNUDiEZ#1996 Poziom 9, Münster, Germany
7 lutego 2023
I dalej nic ;)
niedzioll Poziom 8, Poland, Poland
26 lipca 2023
nadal brak :D
Damian Mazurek Poziom 9, Poland
25 stycznia 2024
nic, a nic!