1. ZonedDateTime
kelas
Terdapat satu lagi kelas yang sangat menarik dalam API Masa Tarikh: kelas ZonedDateTime
. Tujuan utamanya adalah untuk memudahkan anda bekerja dengan tarikh dalam zon waktu yang berbeza.
LocalDate
bagus untuk mewakili tarikh. Contohnya, hari lahir. Hari lahir saya 15 Mac tidak kira di mana saya berada. Ini adalah contoh tarikh.
LocalTime
bagus untuk menggambarkan masa, seperti masa yang ditetapkan pada jam penggera: Saya menetapkan penggera pada 5:00 pagi dan tidak kira di mana saya berada. 5:00 pagi ialah 5:00 pagi. Ini adalah contoh bekerja dengan masa.
Sekarang katakan bahawa kami sedang menulis aplikasi yang menempah penerbangan. Pesawat berlepas dan tiba berdasarkan waktu tempatan. Pesawat berada di udara untuk masa yang tetap, tetapi zon waktu boleh berubah.
Zon masa
By the way, zon waktu adalah keadaan huru-hara. Dan jika anda fikir terdapat 24 zon waktu, anda silap besar.
Sebagai contoh, masa di India berbeza daripada Waktu Purata Greenwich sebanyak lima setengah jam: GMT+5:30
. Sesetengah negara beralih kepada masa penjimatan siang, dan yang lain tidak. Apatah lagi, negara yang berbeza bertukar kepada waktu musim panas pada masa yang berbeza dalam setahun.
Dan sesetengah negara meluluskan undang-undang yang membatalkan masa penjimatan siang, atau memperkenalkannya semula, atau membatalkannya semula.
Walau apa pun, dunia mempunyai zon waktu, dan dalam setiap zon waktu terdapat satu masa. Masa di zon berbeza mungkin bertepatan dalam tempoh tertentu dalam setahun, dan kemudian berbeza dalam tempoh lain. Zon waktu biasanya dinamakan sempena bandar utama yang terletak di dalamnya: Europe/Monaco
, Asia/Singapore
, tetapi terdapat juga pengecualian — US/Pacific
.
Secara rasmi, terdapat 599 zon waktu pada masa ini. Fikirkanlah: 599. Itu jauh dari 24. Selamat datang ke dunia global.
Kelas ZoneId
daripada java.time
pakej digunakan untuk menyimpan zon waktu di Jawa.
Dengan cara ini, ia mempunyai getAvailableZoneIds()
kaedah statik, yang mengembalikan set semua zon waktu yang diketahui sekarang. Untuk mendapatkan senarai semua zon, anda perlu menulis kod berikut:
Kod | Output konsol (separa) |
---|---|
|
|
Untuk mendapatkan ZoneId
objek dengan namanya, anda perlu menggunakan of()
kaedah statik;
Kod | Catatan |
---|---|
|
|
2. Mencipta ZonedDateTime
objek
Apabila mencipta ZonedDateTime
objek, anda perlu memanggil kaedah statik kelas now()
dan menghantar ZoneId
objek kepadanya.
Kod | Output konsol |
---|---|
|
|
Jika anda tidak menghantar ZoneId
objek ke now()
kaedah (dan itu dibenarkan), maka zon waktu ditentukan secara automatik berdasarkan tetapan komputer yang menjalankan program.
Contoh:
Kod | Output konsol |
---|---|
|
|
Menukar tarikh global kepada tarikh tempatan
Salah satu ciri menarik ZonedDateTime
ialah keupayaannya untuk menukar kepada tarikh dan masa tempatan. 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 masa
Seperti LocalDateTime
kelas, ZonedDateTime
kelas mempunyai banyak cara untuk mendapatkan elemen individu tarikh dan masa. Berikut ialah senarai kaedah ini:
|
Mengembalikan tahun tarikh tertentu |
|
Mengembalikan bulan tarikh: salah satu daripada beberapa pemalar —JANUARY, FEBRUARY, ...; |
|
Mengembalikan indeks bulan tarikh. Januari == 1 |
|
Mengembalikan indeks hari dalam sebulan |
|
Mengembalikan hari dalam seminggu: salah satu daripada beberapa pemalar —MONDAY, TUESDAY, ...; |
|
Mengembalikan indeks hari dalam setahun |
|
Mengembalikan jam |
|
Mengembalikan minit |
|
Mengembalikan detik |
|
Mengembalikan nanosaat |
Semua kaedah adalah serupa dengan kaedah kelas LocalDateTime
. Dan, sudah tentu, ZonedDateTime
kelas mempunyai kaedah yang membolehkan anda bekerja dengan tarikh dan masa. Yang berkata, objek di mana kaedah dipanggil tidak berubah. Sebaliknya, mereka mengembalikan ZonedDateTime
objek baharu:
Kaedah | Penerangan |
---|---|
|
Menambah tahun pada tarikh |
|
Menambah bulan pada tarikh |
|
Menambah hari pada tarikh |
|
Menambah jam |
|
Menambah minit |
|
Menambah detik |
|
Menambah nanosaat |
|
Menolak tahun dari tarikh |
|
Menolak bulan dari tarikh |
|
Menolak hari dari tarikh |
|
Menolak jam |
|
Menolak minit |
|
Menolak saat |
|
Menolak nanosaat |
Kami tidak akan memberikan sebarang contoh, kerana kami fikir semuanya di sini jelas dengan analogi dengan kelas yang baru kami pertimbangkan.
GO TO FULL VERSION