1. Sinif ZonedDateTime
Date Time API-də daha bir çox maraqlı sinif var — ZonedDateTime
. Onun əsas məqsədi müxtəlif saat zonasiyalarında tarixlərlə rahat işləməkdir.
LocalDate
tarixlərin təsviri üçün əladır. Məsələn, doğum günü: mənim doğum günüm 15 martdır, harada olmağımdan asılı olmayaraq. Bu, tarix nümunəsidir.
LocalTime
vaxtın təsviri üçün əladır, məsələn, zəngli saat: zəngli saatı səhər saat 5-ə qoydum və fərqi yoxdur, haradayam. Saat 5, saat 5-dir. Bu, vaxtla işləməyin nümunəsidir.
Amma tutaq ki, biz təyyarə biletlərini bron edən tətbiq yazırıq. Təyyarələr yerli vaxtla qalxır və enirlər, təyyarə sabit vaxt uçur, amma saat zonaları dəyişir.
Saat Zonasiyaları
Saat zonaları (saat bölgələri) məsələsində dünyada əsl xaos var. Üstəlik, əgər saat zonalarının 24 olduğunu düşünürsünüzsə, çox yanılırsınız.
Məsələn, Hindistanda vaxt Qrinviç vaxtından 5 saat yarım fərqlənir: GMT+5:30
. Bəzi ölkələr yay vaxtına keçir, bəziləri keçmir. Həmçinin, müxtəlif ölkələr ilin müxtəlif vaxtlarında yay vaxtına keçir.
Bəzi ölkələr qanunlarla yay vaxtına keçidi ləğv edirlər, yenidən tətbiq edirlər və ya yenidən ləğv edirlər.
Ümumiyyətlə, dünyada saat zonaları var, hər zonanın daxilində bir zaman var. Müxtəlif zonalardakı vaxt ilin müəyyən dövrlərində üst-üstə düşə bilər, digər dövrlərdə isə fərqli ola bilər. Zonalar adətən onların daxilində yerləşən böyük şəhərlərin adı ilə adlandırılır: Europe/Monaco
, Asia/Singapore
, amma istisnalar da olur — US/Pacific
.
Hal-hazırda rəsmi olaraq cəmi 599 saat zonası məlumdur. Düşünün: 599. Bu, heç də 24 deyil. Qlobal dünyaya xoş gəldiniz.
Java-da saat zonası saxlamaq üçün java.time
paketindən ZoneId
sinifindən istifadə olunur.
Maraqlıdır ki, onun getAvailableZoneIds()
adlı statik metodu var, bu metod hal-hazırda məlum olan bütün zonaların cəmini qaytarır. Bütün zonaların siyahısını almaq üçün belə bir kod yazmaq lazımdır:
Kod | Ekrana Çıxış (hissəsi) |
---|---|
|
|
Bir ZoneId
obyektini onun adı vasitəsilə əldə etmək üçün of()
statik metodundan istifadə etmək lazımdır;
Kod | Qeyd |
---|---|
|
|
2. ZonedDateTime
obyektinin yaradılması
ZonedDateTime
obyektini yaratmaq üçün, onun üzərində now()
adlı statik metodu çağırmaq və ora ZoneId
obyektini ötürmək lazımdır.
Kod | Ekranda Çıxış |
---|---|
|
|
Əgər now()
metoduna ZoneId
obyekti ötürülməsə və belə etmək də olar, vaxt zonası avtomatik olaraq təyin ediləcək: proqramın işlədiyi kompüterin sazlamalarına əsasən.
Nümunə:
Kod | Ekranda Çıxış |
---|---|
|
|
Qlobal tarix və vaxtın lokal tarixə çevrilməsi
ZonedDateTime
xüsusi maraqlı imkanlarından biri onu lokal tarix və vaxta çevirməkdir. Nümunə:
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);
LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();
3. Vaxt ilə işləmək
LocalDateTime
sinfində olduğu kimi, ZonedDateTime
sinfində də tarix və vaxtın ayrı-ayrı hissələrini əldə etmək üçün bir çox metod var. Budur həmin metodların siyahısı:
|
Tarixdən ili qaytarır |
|
Tarixin ayını qaytarır: xüsusi sabitlərdən biri JANUARY, FEBRUARY, ...; |
|
Tarixin ay nömrəsini qaytarır. Yanvar == 1 |
|
Ay içində gün nömrəsini qaytarır |
|
Həftənin gününü qaytarır: xüsusi sabitlərdən biri MONDAY, TUESDAY, ...; |
|
İlin gün nömrəsini qaytarır |
|
Saatı qaytarır |
|
Dəqiqələri qaytarır |
|
Saniyələri qaytarır |
|
Nanosaniyələri qaytarır |
Bütün metodlar LocalDateTime
metodlarına tamamilə oxşardır. Və əlbəttə, ZonedDateTime
sinfində tarix və vaxt ilə işləməyə imkan verən metodlar var. Bu zaman metodların çağırıldığı obyekt dəyişmir: əvəzində metodlar yeni bir ZonedDateTime
obyekti qaytarır:
Metodlar | Təsvir |
---|---|
|
Tarixə illər əlavə edir |
|
Tarixə aylar əlavə edir |
|
Tarixə günlər əlavə edir |
|
Saatlar əlavə edir |
|
Dəqiqələr əlavə edir |
|
Saniyələr əlavə edir |
|
Nanosaniyələr əlavə edir |
|
Tarixdən illəri çıxır |
|
Tarixdən ayları çıxır |
|
Tarixdən günləri çıxır |
|
Saatları çıxır |
|
Dəqiqələri çıxır |
|
Saniyələri çıxır |
|
Nanosaniyələri çıxır |
Nümunələr gətirməyəcəyik: düşünürük ki, bir az əvvəl nəzərdən keçirdiyimiz siniflərə əsasən hər şey aydındır.
GO TO FULL VERSION