1. ZonedDateTimekelas

Ana kelas liyane sing menarik banget ing API Tanggal Wektu: kelas ZonedDateTime. Tujuane utamane yaiku supaya gampang nggarap tanggal ing zona wektu sing beda-beda.

LocalDateapik kanggo makili tanggal. Contone, ulang tahun. Ulang tahunku tanggal 15 Maret ora ana ngendi wae. Iki minangka conto tanggal.

LocalTimeapik kanggo njlèntrèhaké wektu, kaya wektu nyetel ing jam weker: Aku nyetel weker kanggo 5:00 lan ora Matter ngendi aku. 5:00 punika 5:00 am. Iki minangka conto nggarap wektu.

Saiki ayo ngomong yen kita lagi nulis aplikasi sing buku penerbangan. Pesawat take off lan teka adhedhasar wektu lokal. Pesawat kasebut ana ing udhara sajrone wektu sing tetep, nanging zona wektu bisa diganti.

Zona wektu

Miturut cara, zona wektu iku kekacoan nyata. Lan yen sampeyan mikir yen ana 24 zona wektu, sampeyan salah banget.

Contone, wektu ing India beda karo Greenwich Mean Time kanthi limang jam setengah: GMT+5:30. Sawetara negara ngalih menyang wayah awan, lan liyane ora. Apa maneh, negara sing beda-beda pindhah menyang musim panas ing wektu sing beda-beda ing taun.

Lan sawetara negara nggawe undang-undang sing mbatalake wektu awan, utawa ngenalake maneh, utawa mbatalake maneh.

Ing kasus apa wae, jagad duwe zona wektu, lan ing saben zona wektu ana siji wektu. Wektu ing zona sing beda-beda bisa uga pas sajrone periode taun tartamtu, lan banjur beda sajrone periode liyane. Zona wektu biasane dijenengi miturut kutha-kutha utama sing dumunung ing: Europe/Monaco, Asia/Singapore, nanging uga ana pangecualian - US/Pacific.

Sacara resmi, ana 599 zona wektu saiki. Coba pikirake: 599. Sing adoh saka 24. Sugeng rawuh ing jagad global.

Kelas ZoneIdsaka java.timepaket digunakake kanggo nyimpen zona wektu ing Jawa.

Miturut cara, iki nduweni getAvailableZoneIds()cara statis, sing ngasilake set kabeh zona wektu sing saiki dikenal. Kanggo entuk dhaptar kabeh zona, sampeyan kudu nulis kode ing ngisor iki:

Kode Output konsol (sebagian)
for (String s: ZoneId.getAvailableZoneIds())
   System.out.println(s);
Asia/Aden
America/Cuiaba
Etc/GMT+9
Etc/GMT+8

Kanggo entuk ZoneIdobyek kanthi jeneng, sampeyan kudu nggunakake of()metode statis;

Kode Cathetan
ZoneId zone = ZoneId.of("Africa/Cairo");
Cairo


2. Nggawe ZonedDateTimeobyek

Nalika nggawe ZonedDateTimeobyek, sampeyan kudu nelpon cara statis kelas now()lan pass ZoneIdobyek menyang.

Kode Output konsol
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]

Yen sampeyan ora ngirim ZoneIdobyek menyang now()cara (lan sing diijini), banjur zona wektu ditemtokake kanthi otomatis adhedhasar setelan komputer sing mbukak program kasebut.

Tuladha:

Kode Output konsol
ZonedDateTime time = ZonedDateTime.now();
System.out.println(time);

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

Ngonversi tanggal global menyang tanggal lokal

Salah sawijining fitur menarik ZonedDateTimeyaiku kemampuan kanggo ngowahi menyang tanggal lan wektu lokal. Tuladha:

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

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

3. Nggarap wektu

Kaya LocalDateTimekelas, ZonedDateTimekelas duwe akeh cara kanggo entuk unsur individu tanggal lan wektu. Mangkene dhaptar metode kasebut:

int getYear()
Ngasilake taun tanggal tartamtu
Month getMonth()
Ngasilake sasi tanggal: salah siji saka sawetara konstanta -JANUARY, FEBRUARY, ...;
int getMonthValue()
Ngasilake indeks sasi tanggal. Januari == 1
int getDayOfMonth()
Ngasilake indeks dina sasi
DayOfWeek getDayOfWeek()
Ngasilake dina minggu: salah siji saka sawetara konstanta -MONDAY, TUESDAY, ...;
int getDayOfYear()
Ngasilake indeks dina taun
int getHour()
Ngasilake jam
int getMinute()
Ngasilake menit
int getSecond()
Ngasilake detik
int getNano()
Ngasilake nanodetik

Kabeh cara padha sampurna karo metode kelas LocalDateTime. Lan, mesthi, ZonedDateTimekelas kasebut duwe metode sing ngidini sampeyan nggarap tanggal lan wektu. Sing jarene, obyek sing diarani metode kasebut ora owah. Nanging, dheweke ngasilake obyek anyar ZonedDateTime:

Metode Katrangan
plusYears(int)
Nambah taun kanggo tanggal
plusMonths(int)
Nambah sasi kanggo tanggal
plusDays(int)
Nambah dina kanggo tanggal
plusHours(int)
Tambah jam
plusMinutes(int)
Nambah menit
plusSeconds(int)
Nambah detik
plusNanos(int)
Nambahake nanodetik
minusYears(int)
Subtracts taun saka tanggal
minusMonths(int)
Subtracts sasi saka tanggal
minusDays(int)
Subtracts dina saka tanggal
minusHours(int)
Ngurangi jam
minusMinutes(int)
Ngurangi menit
minusSeconds(int)
Ngurangi detik
minusNanos(int)
Ngurangi nanodetik

Kita ora bakal menehi conto apa wae, amarga kita mikir kabeh ing kene wis jelas kanthi analogi karo kelas sing lagi wae dianggep.