Date Sinfi

Java SELF AZ
Səviyyə , Dərs
Mövcuddur

1. Date sinfi və Unix-vaxt

Java dilinin yaranmasından etibarən tarix və vaxtla işləmək üçün xüsusi bir sinif mövcud idi — Date. Zaman keçdikcə tarixlə işləmək üçün başqa siniflər də yarandı, lakin Date sinfi hələ də proqramçılar tərəfindən istifadə olunur.

Bütün məsələ ondadır ki, bu sinif çox sadə və rahatdır. Proqramçı olaraq siz mütləq real bir layihədə onunla qarşılaşacaqsınız. Onu istifadə edib-etməmək sizin seçiminizdir, amma onu bilmək vacibdir. Buna görə də, zamanınızın bir neçə dəqiqəsini ona ayırın.

Sinif Date nəyə görə bu qədər yaxşıdır? Sadəliyi ilə.

Date sinfi tarix və vaxt haqqında məlumatı 1 yanvar 1970-ci ildən keçmiş millisekundların sayı şəklində saxlayır. Bu çoxlu millisekundlardır, ona görə də onları saxlamaq üçün long tipi istifadə olunur.

Niyə məhz 1970-ci ildən? Bu, Unix-time adlanan bir anlayışdır: Unix əməliyyat sistemi, hansı ki bütün müasir əməliyyat sistemlərinin nənəsidir, vaxtı bu formada saxlayır.

Bununla belə, iki tarix arasındakı keçən zamanı asanlıqla öyrənmək olar: bir tarixi digərindən çıxararaq tarixlər arasındaki zaman fərqini millisekund dəqiqliyi ilə əldə edə bilərsiniz.

İndi Date sinfi ilə işləməyin bir neçə faydalı nümunəsinə baxaq.


2. Cari tarixin alınması

Cari vaxtı və tarixi almaq üçün sadəcə Date tipində bir obyekt yaratmaq kifayətdir. Hər bir yeni obyekt, onun yaradıldığı vaxtı (momentini) saxlayır. Bu çox sadə görünür:

Date current = new Date();

Bu komandadan sonra current dəyişəni yaradılan Date obyektinə bir istinad saxlayacaq ki, bu obyektin içində onun yaradıldığı vaxt — 1 yanvar 1970-ci ildən bəri keçən millisekundların sayı saxlanılacaq.

Cari tarixin ekrana çıxarılması

Cari tarixi ekrana çıxarmaq üçün sadəcə: a) yeni bir Date obyekti yaradın, b) onu ekrana System.out.println() metodu vasitəsilə çıxarın.

Nümunə:

Kod Ekrana çıxarış
Date current = new Date();
System.out.println(current);
Thu Feb 21 14:01:34 EET 2019

Ekrana çıxarış aşağıdakı kimi izah olunur:

Mətn Açıqlama
Thursday Cümə axşamı
February 21 21 Fevral
14:01:34 saat : dəqiqə : saniyə
EET Vaxt zonası: East European Time (Şərqi Avropa vaxtı)
2019 İl

3. Müəyyən bir tarixi təyin etmək

Hazırkı vaxtı necə əldə etməyi öyrəndik, bəs digər bir tarixi və ya vaxtı özündə saxlayan Date obyektini necə yarada bilərik?

Burada da hər şey sadədir. Müəyyən bir günü təyin etmək üçün belə bir kod yazmaq lazımdır:

Date birthday = new Date(il, ay, gün);

Hər şey sadə və aydındır, amma iki məqam var:

  1. Ili 1900-dən etibarən təyin etmək lazımdır.
  2. Aylar sıfırdan başlayaraq nömrələnir.
Maraqlıdır

Bu da Unix əməliyyat sisteminin irsidir: orada proqramçılar ili iki rəqəmlə göstərirdilər. Məsələn, 1977 əvəzinə sadəcə 77 yazırdılar. Beləliklə, 77 düzgün il olacaq, əgər 1900 ildən hesab etsək.

Məsələn, mən 21 mart 1989-cu ildə anadan olmuşam. Mart – üçüncü aydır, deməli, belə yazmalıyam:

Kod Ekrana çıxış
Date current = new Date(89, 2, 21);
System.out.println(current);
Tue Mar 21 00:00:00 EET 1989

Aylar sıfırdan nömrələnir, günlər isə yox. Bir az qəribə deyilmi?

Fikirləşirik ki, əsl proqramçılar özlərini məcbur edib ay günlərini də sıfırdan nömrələməlidirlər. Eh, bu konformistlər 🙂

Müəyyən bir vaxtı təyin etmək

Müəyyən bir vaxt təyin etmək də kifayət qədər asandır: bunun üçün belə bir komanda yazmaq lazımdır:

Date birthday = new Date(il, ay, gün, saat, dəqiqə, saniyə);

Saatlar, dəqiqələr və saniyələr sıfırdan başlayır: içinizdəki proqramçı rahat nəfəs ala bilər.

Misal:

Kod Ekrana çıxış
Date current = new Date(105, 5, 4, 12, 15, 0);
System.out.println(current);
Sat Jun 04 12:15:00 EEST 2005

Biz vaxtı 12:15 və tarixi 4 iyun 2005-ci il olaraq təyin etdik. Proqramçı olmayan biri üçün oxumaq bir az çətindir, amma lazım olduğu kimi işləyir.


4. Tarix fraqmentləri ilə işləmək

Date obyektini sadəcə ekrana çıxarmaq məcburi deyil. Onun metodları var, hansı ki, onun tarixinin ayrı-ayrı fraqmentlərini almağa imkan verir:

Metod Təsvir
int getYear()
Tarixdən 1900 ilə əlaqədar ili qaytarır.
int getMonth()
Tarixdən ayı qaytarır, aylar sıfırdan nömrələnir
int getDate()
Ayın gününü qaytarır
int getDay()
Həftənin gününü qaytarır
int getHours()
Saatları qaytarır
int getMinutes()
Dəqiqələri qaytarır
int getSeconds()
Saniyələri qaytarır

Nümunə:

Kod Ekranda çıxış Qeyd
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-ci il
iyun
ayın günü
şənbə

Bir də onu deyim ki, Date obyektinin tarixinin ayrı-ayrı fraqmentlərini sadəcə almaq yox, həm də dəyişmək mümkündür:

Metod Təsvir
void setYear(int year) Tarixin ilini dəyişir. İl 1900 ilə əlaqəli şəkildə təyin olunur.
void setMonth(int month) Tarixin ayını dəyişir, aylar sıfırdan nömrələnir
void setDate(int date) Ayın gününü dəyişir
void setHours(int hours) Saatları dəyişir
void setMinutes(int minutes) Dəqiqələri dəyişir
void setSeconds(int seconds) Saniyələri dəyişir

5. Millisaniyələr

Artıq dediyimiz kimi, Date obyektinin içində 1 yanvar 1970-ci ildən keçən millisanilərin sayı saxlanılır.

Əgər buna ehtiyacımız varsa, onu Date obyektindən əldə edə bilərik:

long time = date.getTime();

getTime() metodu, Date obyektinin içində saxlanılan millisanilərin sayını qaytarır.

Təkcə millisanilərin sayını əldə etməklə kifayətlənməyib, mövcud obyektin içindəki dəyəri də dəyişə bilərsiniz:

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

Bu arada, bu konstruksiyanı daha qısa yazmaq olar, vaxtı birbaşa Date obyektinin yaradılması zamanı ötürməklə:

Date date = new Date(1117876500000L);

6. Tarixlərin müqayisəsi

Əgər iki tarixi müqayisə etmək və hansının əvvəl olduğunu öyrənmək istəyirsinizsə, bunun üçün üç üsul var

Birinci üsul — sadəcə olaraq, onlarda saxlanılan millisekundların sayını müqayisə etmək:

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

İkinci üsulDate obyektinin before() metodundan istifadə etmək:

if (date1.before(date2))

Bu belə oxunur: əgər date1 date2-dən əvvəldirsə, onda...

Üçüncü üsulDate obyektinin after() metodundan istifadə etmək:

if (date2.after(date1))

Bu belə oxunur: əgər date2 date1-dən sonradırsa, onda...


7. DateFormat Sinfi

Xatırlayırsınızsa, biz tarixi ekrana çıxaranda, nəsə bu tip bir şey görüntülənirdi: Thu Feb 21 14:01:34 EET 2019. Düzdür, hər şey qaydasındadır, amma bu daha çox proqramçı üçün tarix görünüşüdür. İstifadəçi üçünsə tarixin daha aydın şəkildə göstərilməsini istərdik. Məsələn, Çərşənbə axşamı, 21 Fevral kimi.

Və ili göstərmədən. Ya da lazım olsa il ilə. Ümumiyyətlə, tarixi müxtəlif formalarda göstərə bilmək istərdik.

Bunun üçün xüsusi bir sinif var — SimpleDateFormat.

Misal:

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);
Ekran çıxışı
Jun-04-2005

Gördüyünüz kimi, proqram ekrana bunu çıxardı: Jun-04-2005. Əvvəlki kimi deyil.

Bütün məsələ ondadır ki, biz birbaşa Date obyektini deyil, SimpleDateFormat tipli obyektin format() metodunu çağıraraq əldə etdiyimiz xüsusi bir sətir göstərirdik. Amma əsas məqam bu deyil.

SimpleDateFormat obyekti yaradıldıqda, ona parametr kimi bir sətir ötürürük: "MMM-dd-YYYY". Bax bu sətirdə göstərilən format sayəsində nəticədə ekranda gördüyünüz tarix formalaşır.

  • MMM — ayın adını üç hərf ilə göstərmək
  • dd — ayın gününü göstərmək
  • YYYY — ili dörd rəqəm ilə göstərmək

Əgər ayı rəqəmlə göstərmək istəyiriksə, MMM yerinə MM yazmalıyıq: nəticədə "MM-dd-YYYY" sətiri yaranır. Ekranda bu göstəriləcək: 06-04-2005

Bu sinfi daha ətraflı şəkildə sonra öyrənəcəyik.


8. Date.parse metodu

Date sinfi başqa bir maraqlı və faydalı bir işi də bacarır: mətn sətirindən tarixi əldə etmək. Yəni proqramçılar deyəndə, sətiri parse etmək.

Bunun üçün onun xüsusi bir metodu var — parse(). Parse prosesi belə görünür:

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

Bu arada, eyni kodu daha qısa şəkildə də yazmaq olar:

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

Sətir parsing'i daha ətraflı digər dərslərdə izah edəcəyik.


Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION