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ış |
---|---|
|
|
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:
- Ili 1900-dən etibarən təyin etmək lazımdır.
- Aylar sıfırdan başlayaraq nömrələnir.
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ış |
---|---|
|
|
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ış |
---|---|
|
|
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 |
---|---|
|
Tarixdən 1900 ilə əlaqədar ili qaytarır. |
|
Tarixdən ayı qaytarır, aylar sıfırdan nömrələnir |
|
Ayın gününü qaytarır |
|
Həftənin gününü qaytarır |
|
Saatları qaytarır |
|
Dəqiqələri qaytarır |
|
Saniyələri qaytarır |
Nümunə:
Kod | Ekranda çıxış | Qeyd |
---|---|---|
|
|
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 üsul — Date
obyektinin before()
metodundan istifadə etmək:
if (date1.before(date2))
Bu belə oxunur: əgər date1
date2
-dən əvvəldirsə, onda...
Üçüncü üsul — Date
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 |
---|
|
Ekran çıxışı |
|
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.
GO TO FULL VERSION