1. Czas klasowy Datei uniksowy

Od samego początku istnienia języka Java miał specjalną klasę do pracy z czasem i datą - Date. Z czasem pojawiło się jeszcze kilka klas do pracy z datami, ale klasa ta Datejest używana przez programistów do dziś.

Chodzi o to, że jest to bardzo proste i wygodne. A ty, jako programista, na pewno spotkasz się z tym w każdym prawdziwym projekcie. Korzystaj lub nie - wybór należy do Ciebie, ale musisz o tym wiedzieć. Dlatego poświęć mu kilka minut swojego cennego czasu.

Dlaczego klasa jest taka dobra Date? Ze swoją prostotą.

Klasa Dateprzechowuje informacje o dacie i godzinie jako liczbę milisekund od 1 stycznia 1970 r. To dużo milisekund, więc long.

Ciekawy

Dlaczego od 1970 roku? Jest to tak zwany czas uniksowy : w ten sposób system operacyjny Unix, który jest przodkiem wszystkich nowoczesnych systemów operacyjnych, odmierza czas.

Ale możesz bardzo łatwo dowiedzieć się, ile czasu minęło między dwiema datami: po prostu odejmij jedną datę od drugiej, a otrzymasz różnicę czasu między datami z dokładnością do milisekundy.

Oto kilka przydatnych przykładów pracy z Date.


2. Uzyskanie aktualnej daty

Aby uzyskać aktualną godzinę i datę, po prostu utwórz obiekt typu Date. Każdy nowy obiekt przechowuje czas (moment) swojego powstania. Wygląda to bardzo prosto:

Date current = new Date();

Po wykonaniu tego polecenia zmienna currentbędzie przechowywać referencję do tworzonego obiektu Date, która będzie przechowywać w sobie czas jego powstania – liczbę milisekund, które upłynęły od 1 stycznia 1970 roku.

Wyświetlanie aktualnej daty na ekranie

Aby wyświetlić aktualną datę wystarczy: a) utworzyć nowy obiekt Date, b) wyświetlić go za pomocą formatki System.out.println().

Przykład:

Kod Wyjście na wyświetlaczu
Date current = new Date();
System.out.println(current);
Thu Feb 21 14:01:34 EET 2019

Dane wyjściowe ekranu są dekodowane w następujący sposób:

Tekst Deszyfrowanie
czwartek _ Czwartek
21 lutego 21 lutego
14:01:34 godziny : minuty : sekundy
EET Strefa czasowa: czas wschodnioeuropejski (czas wschodnioeuropejski)
2019 Rok

3. Ustalenie konkretnej daty

Wymyśliliśmy, jak uzyskać aktualny czas, ale jak stworzyć obiekt Date, który zawierałby inną datę lub godzinę?

Tutaj też wszystko jest proste. Aby ustawić konkretny dzień, musisz napisać następujący kod:

Date birthday = new Date(год, месяц, день);

Wszystko jest proste i oczywiste, ale są dwa niuanse:

  1. Rok musi być ustawiony od 1900.
  2. Miesiące są liczone od zera.
Ciekawy

Jest to również spuścizna systemu operacyjnego Unix: tam programiści oznaczali rok dwiema cyframi. Zamiast 1977 po prostu napisali 77. Zatem 77 będzie poprawnym rokiem, jeśli policzymy od 1900.

Na przykład urodziłem się 21 marca 1989 roku. Marzec to trzeci miesiąc, więc muszę pisać

Kod Wyjście na wyświetlaczu
Date current = new Date(89, 2, 21);
System.out.println(current);
Tue Mar 21 00:00:00 EET 1989

Miesiące są liczone od zera, dni nie. Trochę dziwne, prawda?

Uważamy, że prawdziwi programiści musieli pokonać samych siebie, a także policzyć dni miesiąca od nowa. Ach ci konformiści 🙂

Ustawianie określonego czasu

Ustawienie określonego czasu jest również dość proste: w tym celu musisz napisać polecenie takie jak:

Date birthday = new Date(год, месяц, день, час, minutyы, секунды);

Godziny, minuty i sekundy są liczone od zera: programista w tobie powinien odetchnąć z ulgą.

Przykład:

Kod Wyjście na wyświetlaczu
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current);
Sat Jun 04 12:15:00 EEST 2005

Ustawiamy godzinę na 12:15 i datę na 4 czerwca 2005 roku . Czyta się to trochę trudne dla osoby niebędącej programistą, ale działa tak, jak powinno.


4. Praca z fragmentami dat

Obiekt Datenie może być po prostu wyświetlony na ekranie. Posiada metody pozwalające na uzyskanie poszczególnych fragmentów jego daty:

metoda Opis
int getYear()
Zwraca rok daty względem roku 1900.
int getMonth()
Zwraca miesiąc daty, miesiące są numerowane od zera
int getDate()
Zwraca dzień miesiąca
int getDay()
Zwraca dzień tygodnia
int getHours()
Zwraca zegar
int getMinutes()
Zwraca minuty
int getSeconds()
Zwraca sekundy

Przykład:

Kod Wyjście na wyświetlaczu Notatka
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current.getYear());
System.out.println(current.getMonth());
System.out.println(current.getDate());
System.out.println(current.getDay());

105
5
4
6

2005 rok
czerwiec
dzień miesiąca
sobota

DateNawiasem mówiąc, poszczególne fragmenty daty można nie tylko pobrać z obiektu , ale także zmodyfikować:

metoda Opis
void setYear(int year) Zmienia rok daty. Rok podany względem 1900.
void setMonth(int month) Zmienia miesiąc daty, miesiące są numerowane od zera
void setDate(int date) Zmienia dzień miesiąca
void setHours(int hours) Zmienia zegar
void setMinutes(int minutes) Zmienia minuty
void setSeconds(int seconds) Zmienia sekundy

5. Milisekundy

Jak powiedzieliśmy, Dateliczba milisekund, które upłynęły od 1 stycznia 1970 roku, jest przechowywana wewnątrz obiektu.

Jeśli go potrzebujemy, możemy go pobrać z obiektu Date:

long time = date.getTime();

Metoda getTime()zwraca liczbę milisekund przechowywanych w pliku Date.

Możesz nie tylko uzyskać liczbę milisekund, ale także zmienić ją w istniejącym obiekcie:

Date date = new Date();
date.setTime(1117876500000L);

Nawiasem mówiąc, możesz napisać tę konstrukcję krócej, przekazując czas obiektowi Datedokładnie w momencie jego tworzenia:

Date date = new Date(1117876500000L);

6. Porównywanie dat

Jeśli chcesz porównać dwie daty i dowiedzieć się, która z nich była pierwsza, możesz to zrobić na trzy sposoby

Pierwszym sposobem jest po prostu porównanie liczby milisekund, które przechowują:

if (date1.getTime() < date2.getTime())

Drugim sposobem jest użycie metody before()obiektowej Date:

if (date1.before(date2))

Brzmi to tak: jeśli date1przed date2, to ...

Trzecim sposobem jest użycie metody after()obiektowej Date:

if (date2.after(date1))

Brzmi to tak: jeśli date2po date1, to ...


7 klasaDateFormat

Pamiętaj, kiedy wyświetlaliśmy datę na ekranie, coś w stylu Thu Feb 21 14:01:34 EET 2019. Wszystko wydaje się być w porządku, ale dla programisty jest to raczej wyświetlanie daty. A dla użytkownika chciałbym wyraźniej wyświetlać datę. Coś jak Вторник, 21 Февраля.

I bez roku. Cóż, za rok, jeśli to konieczne. Ogólnie rzecz biorąc, chciałbym wyświetlać datę na różne sposoby.

Jest do tego specjalna klasa - SimpleDateFormat.

Przykład:

Kod
Date current = new Date(105, 5, 4, 12, 15, 0);
SimpleDateFormat formatter = new SimpleDateFormat("MMM-dd-YYYY");
String message = formatter.format(current);
System.out.println(message);
Wyjście na wyświetlaczu
Jun-04-2005

Zobacz, co program wyświetlił: Jun-04-2005. Wcale nie tak jak wcześniej.

Rzecz w tym, że pokazaliśmy nie sam obiekt Date, ale specjalny napis uzyskany przez wywołanie metody format()na obiekcie typu SimpleDateFormat. Ale to nawet nie jest tutaj kluczem.

Kiedy obiekt SimpleDateFormat jest tworzony, przekazujemy mu ciąg znaków jako parametry "MMM-dd-YYYY". To w tym wierszu szyfrowany jest format daty, który zobaczyłeś na ekranie.

  • MMM oznacza wyświetlanie nazwy miesiąca, skróconej do trzech liter
  • dd - wyświetla dzień miesiąca
  • YYYY - wyświetla rok składający się z czterech cyfr

Jeśli chcemy wyświetlić miesiąc jako liczby, musimy MMM napisać zamiast MM: otrzymujemy ciąg "MM-dd-YYYY". Zostanie wyświetlony ekran06-04-2005

Omówimy tę klasę bardziej szczegółowo później.


8. MetodaDate.parse

Klasa Datemoże zrobić jeszcze jedną interesującą i użyteczną rzecz: pobrać datę z ciągu tekstowego. Lub, jak mówią programiści, przeanalizuj łańcuch.

Aby to zrobić, ma specjalną metodę - parse(). Proces parsowania wygląda następująco:

Date date = new Date();
date.setTime( Date.parse("Jul 06 12:15:00 2019") );

Nawiasem mówiąc, ten sam kod można napisać bardziej zwięźle:

Date date = new Date("Jul 06 12:15:00 2019");

Omówimy parsowanie łańcuchów bardziej szczegółowo w innych wykładach.