CodeGym /Kurslar /Java SELF AZ /Vaxt qurşaqları

Vaxt qurşaqları

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

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)
for (String s: ZoneId.getAvailableZoneIds())
   System.out.println(s);
Asia/Aden
America/Cuiaba
Etc/GMT+9
Etc/GMT+8

Bir ZoneId obyektini onun adı vasitəsilə əldə etmək üçün of() statik metodundan istifadə etmək lazımdır;

Kod Qeyd
ZoneId zone = ZoneId.of("Africa/Cairo");
Qahirə


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ış
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime time = ZonedDateTime.now(zone);
System.out.println(time);


2019-02-22T11:37:58.074816+02:00[Africa/Cairo]

Ə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ış
ZonedDateTime time = ZonedDateTime.now();
System.out.println(time);

2019-02-22T13:39:05.70842+02:00[Europe/Helsinki]

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ı:

int getYear()
Tarixdən ili qaytarır
Month getMonth()
Tarixin ayını qaytarır: xüsusi sabitlərdən biri JANUARY, FEBRUARY, ...;
int getMonthValue()
Tarixin ay nömrəsini qaytarır. Yanvar == 1
int getDayOfMonth()
Ay içində gün nömrəsini qaytarır
DayOfWeek getDayOfWeek()
Həftənin gününü qaytarır: xüsusi sabitlərdən biri MONDAY, TUESDAY, ...;
int getDayOfYear()
İlin gün nömrəsini qaytarır
int getHour()
Saatı qaytarır
int getMinute()
Dəqiqələri qaytarır
int getSecond()
Saniyələri qaytarır
int getNano()
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
plusYears(int)
Tarixə illər əlavə edir
plusMonths(int)
Tarixə aylar əlavə edir
plusDays(int)
Tarixə günlər əlavə edir
plusHours(int)
Saatlar əlavə edir
plusMinutes(int)
Dəqiqələr əlavə edir
plusSeconds(int)
Saniyələr əlavə edir
plusNanos(int)
Nanosaniyələr əlavə edir
minusYears(int)
Tarixdən illəri çıxır
minusMonths(int)
Tarixdən ayları çıxır
minusDays(int)
Tarixdən günləri çıxır
minusHours(int)
Saatları çıxır
minusMinutes(int)
Dəqiqələri çıxır
minusSeconds(int)
Saniyələri çıxır
minusNanos(int)
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.


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