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