1. ZonedDateTimekelas
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.
LocalDatebagus untuk mewakili tarikh. Contohnya, hari lahir. Hari lahir saya 15 Mac tidak kira di mana saya berada. Ini adalah contoh tarikh.
LocalTimebagus 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 ZoneIddaripada java.timepakej 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 ZoneIdobjek dengan namanya, anda perlu menggunakan of()kaedah statik;
| Kod | Catatan |
|---|---|
|
|
2. Mencipta ZonedDateTimeobjek
Apabila mencipta ZonedDateTimeobjek, anda perlu memanggil kaedah statik kelas now()dan menghantar ZoneIdobjek kepadanya.
| Kod | Output konsol |
|---|---|
|
|
Jika anda tidak menghantar ZoneIdobjek 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 ZonedDateTimeialah 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 LocalDateTimekelas, ZonedDateTimekelas 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, ZonedDateTimekelas mempunyai kaedah yang membolehkan anda bekerja dengan tarikh dan masa. Yang berkata, objek di mana kaedah dipanggil tidak berubah. Sebaliknya, mereka mengembalikan ZonedDateTimeobjek 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