1. ZonedDateTime
kelas
Ada kelas lain yang sangat menarik di Date Time API: kelas ZonedDateTime
. Tujuan utamanya adalah untuk memudahkan bekerja dengan tanggal di zona waktu yang berbeda.
LocalDate
sangat bagus untuk mewakili tanggal. Misalnya, ulang tahun. Ulang tahun saya 15 Maret di mana pun saya berada. Ini adalah contoh kencan.
LocalTime
sangat bagus untuk mendeskripsikan waktu, seperti waktu yang disetel pada jam alarm: Saya menyetel alarm untuk jam 5 pagi dan di mana pun saya berada. 5:00 pagi adalah 5:00 pagi. Ini adalah contoh bekerja dengan waktu.
Sekarang katakanlah kita sedang menulis aplikasi yang memesan penerbangan. Pesawat lepas landas dan tiba berdasarkan waktu setempat. Pesawat berada di udara untuk waktu yang tetap, tetapi zona waktu dapat berubah.
Zona waktu
Omong-omong, zona waktu benar-benar berantakan. Dan jika Anda mengira ada 24 zona waktu, Anda salah besar.
Misalnya, waktu di India berbeda lima setengah jam dari Greenwich Mean Time: GMT+5:30
. Beberapa negara beralih ke waktu musim panas, dan yang lainnya tidak. Terlebih lagi, berbagai negara beralih ke waktu musim panas pada waktu yang berbeda dalam setahun.
Dan beberapa negara mengeluarkan undang-undang yang membatalkan waktu musim panas, atau memperkenalkannya kembali, atau membatalkannya lagi.
Bagaimanapun, dunia memiliki zona waktu, dan dalam setiap zona waktu ada satu waktu. Waktu di zona yang berbeda mungkin bertepatan selama periode tertentu dalam setahun, dan kemudian berbeda selama periode lainnya. Zona waktu biasanya dinamai berdasarkan kota-kota besar yang terletak di dalamnya: Europe/Monaco
, Asia/Singapore
, tetapi ada juga pengecualian — US/Pacific
.
Secara resmi, ada 599 zona waktu saat ini. Coba pikirkan: 599. Itu jauh dari 24. Selamat datang di dunia global.
Kelas ZoneId
dari java.time
paket digunakan untuk menyimpan zona waktu di Jawa.
Omong-omong, ini memiliki getAvailableZoneIds()
metode statis, yang mengembalikan kumpulan semua zona waktu yang diketahui saat ini. Untuk mendapatkan daftar semua zona, Anda perlu menulis kode berikut:
Kode | Keluaran konsol (sebagian) |
---|---|
|
|
Untuk mendapatkan ZoneId
objek dengan namanya, Anda perlu menggunakan of()
metode statis;
Kode | Catatan |
---|---|
|
|
2. Membuat ZonedDateTime
objek
Saat membuat ZonedDateTime
objek, Anda perlu memanggil metode statis kelas now()
dan meneruskan ZoneId
objek ke sana.
Kode | Keluaran konsol |
---|---|
|
|
Jika Anda tidak meneruskan ZoneId
objek ke now()
metode (dan itu diperbolehkan), maka zona waktu ditentukan secara otomatis berdasarkan pengaturan komputer yang menjalankan program.
Contoh:
Kode | Keluaran konsol |
---|---|
|
|
Mengubah tanggal global menjadi tanggal lokal
Salah satu fitur menariknya ZonedDateTime
adalah kemampuannya untuk mengonversi ke tanggal dan waktu lokal. Contoh:
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);
LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();
3. Bekerja dengan waktu
Seperti LocalDateTime
kelas, ZonedDateTime
kelas memiliki banyak cara untuk mendapatkan elemen individu dari tanggal dan waktu. Berikut adalah daftar metode tersebut:
|
Mengembalikan tahun dari tanggal tertentu |
|
Mengembalikan bulan tanggal: salah satu dari beberapa konstanta —JANUARY, FEBRUARY, ...; |
|
Mengembalikan indeks bulan tanggal. Januari == 1 |
|
Mengembalikan indeks hari dalam sebulan |
|
Mengembalikan hari dalam seminggu: salah satu dari beberapa konstanta —MONDAY, TUESDAY, ...; |
|
Mengembalikan indeks hari dalam setahun |
|
Mengembalikan jam |
|
Mengembalikan menit |
|
Mengembalikan detik |
|
Mengembalikan nanodetik |
Semua metode sangat mirip dengan metode kelas LocalDateTime
. Dan, tentu saja, ZonedDateTime
kelas tersebut memiliki metode yang memungkinkan Anda bekerja dengan tanggal dan waktu. Meskipun demikian, objek tempat metode dipanggil tidak berubah. Sebaliknya, mereka mengembalikan objek baru ZonedDateTime
:
Metode | Keterangan |
---|---|
|
Menambahkan tahun ke tanggal |
|
Menambahkan bulan ke tanggal |
|
Menambahkan hari ke tanggal |
|
Menambahkan jam |
|
Menambahkan menit |
|
Menambahkan detik |
|
Menambahkan nanodetik |
|
Kurangi tahun dari tanggal |
|
Mengurangi bulan dari tanggal |
|
Mengurangi hari dari tanggal |
|
Mengurangi jam |
|
Mengurangi menit |
|
Mengurangi detik |
|
Mengurangi nanodetik |
Kami tidak akan memberikan contoh apa pun, karena menurut kami semuanya di sini jelas dengan analogi dengan kelas yang baru saja kami pertimbangkan.
GO TO FULL VERSION