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);
}
2
Zadanie
Składnia Java,  poziom 8lekcja 4
Niedostępne
Wprowadzanie kodu
Nie musisz myśleć, po prostu go wyklep! Brzmi to trochę paradoksalnie, ale czasami Twoje palce „pamiętają” kod lepiej niż Twój świadomy umysł. Właśnie dlatego trening w tajnym centrum CodeGym zawiera zadania wymagające wprowadzania kodu. Wprowadzając kod, przyzwyczajasz się do składni oraz zarabiasz ciemną materię. Co więcej, walczysz z własnym lenistwem!

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