1. Czas klasowy Date
i 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 Date
jest 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 Date
przechowuje informacje o dacie i godzinie jako liczbę milisekund od 1 stycznia 1970 r. To dużo milisekund, więc long
.
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 current
bę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 |
---|---|
|
|
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:
- Rok musi być ustawiony od 1900.
- Miesiące są liczone od zera.
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 |
---|---|
|
|
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 |
---|---|
|
|
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 Date
nie może być po prostu wyświetlony na ekranie. Posiada metody pozwalające na uzyskanie poszczególnych fragmentów jego daty:
metoda | Opis |
---|---|
|
Zwraca rok daty względem roku 1900. |
|
Zwraca miesiąc daty, miesiące są numerowane od zera |
|
Zwraca dzień miesiąca |
|
Zwraca dzień tygodnia |
|
Zwraca zegar |
|
Zwraca minuty |
|
Zwraca sekundy |
Przykład:
Kod | Wyjście na wyświetlaczu | Notatka |
---|---|---|
|
|
2005 rok czerwiec dzień miesiąca sobota |
Date
Nawiasem 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, Date
liczba 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 Date
dokł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 date1
przed date2
, to ...
Trzecim sposobem jest użycie metody after()
obiektowej Date
:
if (date2.after(date1))
Brzmi to tak: jeśli date2
po 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 |
---|
|
Wyjście na wyświetlaczu |
|
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 Date
moż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.
GO TO FULL VERSION