1. ZonedDateTimeklase

May isa pang napaka-interesante na klase sa Date Time API: ang ZonedDateTimeklase. Ang pangunahing layunin nito ay gawin itong maginhawa upang gumana sa mga petsa sa iba't ibang time zone.

LocalDateay mahusay para sa kumakatawan sa mga petsa. Halimbawa, mga kaarawan. Ang aking kaarawan ay ika-15 ng Marso saan man ako naroroon. Ito ay isang halimbawa ng isang petsa.

LocalTimeMahusay na ilarawan ang oras, tulad ng oras na itinakda sa alarm clock: Itinakda ko ang alarma para sa 5:00 am at hindi mahalaga kung nasaan ako. 5:00 am ay 5:00 am. Ito ay isang halimbawa ng pagtatrabaho sa oras.

Ngayon sabihin natin na nagsusulat kami ng application na nagbu-book ng mga flight. Lumilipad at dumarating ang mga eroplano batay sa lokal na oras. Ang eroplano ay nasa himpapawid para sa isang nakapirming oras, ngunit ang mga time zone ay maaaring magbago.

Mga time zone

Sa pamamagitan ng paraan, ang mga time zone ay isang tunay na gulo. At kung sa tingin mo ay mayroong 24 na time zone, ikaw ay lubos na nagkakamali.

Halimbawa, ang oras sa India ay naiiba sa Greenwich Mean Time ng limang at kalahating oras: GMT+5:30. Ang ilang mga bansa ay lumipat sa daylight saving time, at ang iba ay hindi. Higit pa rito, lumilipat ang iba't ibang bansa sa oras ng tag-araw sa iba't ibang oras ng taon.

At ang ilang bansa ay nagpapasa ng mga batas na kanselahin ang daylight saving time, o muling ipinakilala ito, o kanselahin itong muli.

Sa anumang kaganapan, ang mundo ay may mga time zone, at sa loob ng bawat time zone ay may isang oras. Ang oras sa iba't ibang mga zone ay maaaring magkasabay sa ilang partikular na panahon ng taon, at pagkatapos ay mag-iba sa iba pang mga panahon. Ang mga time zone ay karaniwang ipinangalan sa mga pangunahing lungsod na matatagpuan sa kanila: Europe/Monaco, Asia/Singapore, ngunit mayroon ding mga pagbubukod — US/Pacific.

Opisyal, mayroong 599 time zone sa ngayon. Pag-isipan ito: 599. Malayo iyon sa 24. Maligayang pagdating sa pandaigdigang mundo.

Ang ZoneIdklase mula sa java.timepackage ay ginagamit upang mag-imbak ng time zone sa Java.

Sa pamamagitan ng paraan, mayroon itong static getAvailableZoneIds()na pamamaraan, na nagbabalik ng hanay ng lahat ng kasalukuyang kilalang time zone. Upang makakuha ng isang listahan ng lahat ng mga zone, kailangan mong isulat ang sumusunod na code:

Code Output ng console (bahagyang)
for (String s: ZoneId.getAvailableZoneIds())
   System.out.println(s);
Asia/Aden
America/Cuiaba
Etc/GMT+9
Etc/GMT+8

Upang makakuha ng isang ZoneIdbagay sa pamamagitan ng pangalan nito, kailangan mong gamitin ang static of()na paraan;

Code Tandaan
ZoneId zone = ZoneId.of("Africa/Cairo");
Cairo


2. Paglikha ng isang ZonedDateTimebagay

Kapag lumilikha ng isang ZonedDateTimebagay, kailangan mong tawagan ang static now()na pamamaraan ng klase at ipasa ang isang ZoneIdbagay dito.

Code Output ng console
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]

Kung hindi mo ipapasa ang isang ZoneIdbagay sa now()pamamaraan (at pinapayagan iyon), awtomatikong tinutukoy ang time zone batay sa mga setting ng computer na nagpapatakbo ng program.

Halimbawa:

Code Output ng console
ZonedDateTime time = ZonedDateTime.now();
System.out.println(time);

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

Pag-convert ng isang pandaigdigang petsa sa isang lokal

Ang isa sa mga kagiliw-giliw na tampok ng ZonedDateTimeay ang kakayahang mag-convert sa isang lokal na petsa at oras. Halimbawa:

ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);

LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();

3. Paggawa gamit ang oras

Tulad ng LocalDateTimeklase, ang ZonedDateTimeklase ay maraming paraan para makakuha ng mga indibidwal na elemento ng isang petsa at oras. Narito ang isang listahan ng mga pamamaraang ito:

int getYear()
Ibinabalik ang taon ng isang partikular na petsa
Month getMonth()
Ibinabalik ang buwan ng petsa: isa sa ilang mga constant —JANUARY, FEBRUARY, ...;
int getMonthValue()
Ibinabalik ang index ng buwan ng petsa. Enero == 1
int getDayOfMonth()
Ibinabalik ang index ng araw ng buwan
DayOfWeek getDayOfWeek()
Ibinabalik ang araw ng linggo: isa sa ilang mga constants —MONDAY, TUESDAY, ...;
int getDayOfYear()
Ibinabalik ang index ng araw ng taon
int getHour()
Ibinabalik ang mga oras
int getMinute()
Ibinabalik ang mga minuto
int getSecond()
Ibinabalik ang mga segundo
int getNano()
Ibinabalik ang mga nanosecond

Ang lahat ng mga pamamaraan ay perpektong kahalintulad sa mga pamamaraan ng LocalDateTimeklase. At, siyempre, ang ZonedDateTimeklase ay may mga pamamaraan na nagpapahintulot sa iyo na magtrabaho kasama ang mga petsa at oras. Iyon ay sinabi, ang bagay kung saan tinawag ang mga pamamaraan ay hindi nagbabago. Sa halip, nagbabalik sila ng bagong ZonedDateTimebagay:

Paraan Paglalarawan
plusYears(int)
Nagdaragdag ng mga taon sa petsa
plusMonths(int)
Nagdaragdag ng mga buwan sa petsa
plusDays(int)
Nagdaragdag ng mga araw sa petsa
plusHours(int)
Nagdadagdag ng mga oras
plusMinutes(int)
Nagdadagdag ng mga minuto
plusSeconds(int)
Nagdadagdag ng mga segundo
plusNanos(int)
Nagdaragdag ng mga nanosecond
minusYears(int)
Ibinabawas ang mga taon mula sa petsa
minusMonths(int)
Ibinabawas ang mga buwan mula sa petsa
minusDays(int)
Ibinabawas ang mga araw mula sa petsa
minusHours(int)
Nagbabawas ng mga oras
minusMinutes(int)
Nagbabawas ng minuto
minusSeconds(int)
Nagbabawas ng mga segundo
minusNanos(int)
Ibinabawas ang mga nanosecond

Hindi kami magbibigay ng anumang mga halimbawa, dahil sa tingin namin ang lahat ng bagay dito ay malinaw sa pamamagitan ng pagkakatulad sa mga klase na isinasaalang-alang namin.