1. Bertukar daripada Datekelas kepada Calendarkelas
Pengaturcara menyukai Datekelas kerana kesederhanaan dan sokongan untuk piawaian Unix, tetapi seperti yang anda tahu, setiap mawar mempunyai durinya.
Pengaturcara mahukan Datekelas "pintar". Dan mereka mendapat apa yang mereka mahu dalam bentuk kelas Calendar. Ia difikirkan sebagai cara untuk bukan sahaja menyimpan tarikh, tetapi juga untuk melakukan operasi sukar dengan tarikh.
Nama penuh kelas Calendarialah java.util.Calendar. Jangan lupa untuk menambahkannya pada pernyataan import jika anda memutuskan untuk menggunakannya dalam kod anda.
Anda boleh membuat Calendarobjek dengan arahan ini:
Calendar date = Calendar.getInstance();
Kaedah statik getInstance()kelas Calendarmencipta Calendarobjek yang dimulakan dengan tarikh semasa. Kalendar yang anda inginkan akan dibuat berdasarkan tetapan komputer yang menjalankan program.
Atau lebih tepat lagi, kalendar yang anda dapat... Itu kerana manusia di Bumi tidak terhad kepada satu kalendar. Sebaliknya, mereka menggunakan banyak. Dan hampir setiap daripada mereka dikaitkan dengan sesuatu agama atau negara. Kelas Calendarmenyokong 3 daripadanya:
| Kalendar | Penerangan |
|---|---|
| Kalendar Gregorian | Kalendar Gregorian Kristian |
| Kalendar Buddha | kalendar Buddha |
| Kalendar Imperial Jepun | Kalendar empayar Jepun |
Tetapi ada juga kalendar Cina dan Arab. Pada asasnya, bekerja dengan masa tidak semudah yang disangka.
Dalam kalendar Cina, tahun secara rasmi ialah 4716 pada masa penulisan pelajaran ini. Dan mengikut kalendar umat Islam, tahunnya ialah 1398. Selamat datang ke dunia besar, rakan pengaturcara saya.
2. Mencipta objek kalendar
Kami akan menggunakan kalendar Gregorian, kerana ia adalah yang paling biasa di dunia. Sekurang-kurangnya sehingga China membeli Oracle dan menjadikan kalendar Cina sebagai yang utama.
Anda boleh membuat objek kalendar dengan mana-mana tarikh menggunakan pernyataan seperti ini:
Calendar date = new GregorianCalendar(year, month, day);
Ya, anda perlu menulis GregorianCalendarsetiap masa. Sebaliknya Calendar, anda juga boleh menulis GregorianCalendar— itu juga akan berfungsi. Tetapi menulis hanya Calendarlebih pendek.
Tahun mesti ditulis sepenuhnya, cth anda tidak boleh menulis 19 berbanding 2019. Bulan masih dinomborkan dari sifar. Tetapi seperti sebelum ini, hari dalam bulan tidak dinomborkan dari sifar. Nerds!
Untuk menetapkan masa serta tarikh, anda perlu memasukkan masa sebagai hujah tambahan:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
Anda juga boleh lulus dalam milisaat jika perlu. Mereka adalah parameter selepas bilangan saat.
3. Memaparkan objek kalendar pada skrin
Jika anda hanya mencetak objek kalendar pada skrin, anda tidak akan sangat berpuas hati dengan hasilnya.
| Kod |
|---|
|
| Output konsol |
|
Perkara yang perlu diingat di sini ialah kalendar ialah kalendar, bukan tarikh : ia mempunyai semua jenis tetapan yang semuanya akan dipaparkan pada skrin.
Adalah wajar untuk menggunakan SimpleDateFormatobjek untuk memaparkan kalendar, tetapi sehingga kami mengkajinya, anda boleh menggunakan penggodaman hayat ini.
Date date = calendar.getTime();
Objek Calendarboleh ditukar dengan mudah kepada Dateobjek, dan anda sudah tahu cara memaparkan Dateobjek. Anda boleh menggunakan kod seperti ini untuk menukar Calendarobjek kepada Date:
Menggunakan getTime()kaedah:
| Kod | Output konsol |
|---|---|
|
|
Itu perkara yang agak berbeza, bukan?
4. Bekerja dengan unsur tarikh
Untuk mendapatkan elemen tertentu tarikh (cth. tahun, bulan, ...), kelas Calendarmempunyai get()kaedah. Ia adalah satu kaedah, tetapi ia mempunyai parameter:
int month = calendar.get(Calendar.MONTH);
Di mana calendarpembolehubah Calendar, dan MONTHmerupakan medan tetap kelas Calendar.
Anda lulus salah satu Calendarmedan tetap kelas sebagai hujah kepada getkaedah, dan anda mendapat nilai yang diingini sebagai hasilnya.
Contoh
| Kod | Penerangan |
|---|---|
|
era (sebelum atau selepas era biasa) tahun bulan hari bulan hari minggu jam minit saat |
Untuk menukar elemen tarikh, gunakan setkaedah:
calendar.set(Calendar.MONTH, value);
Di mana calendarpembolehubah Calendar, dan MONTHmerupakan medan tetap kelas Calendar.
Apabila bekerja dengan setkaedah, anda lulus salah satu Calendarmedan tetap kelas sebagai argumen pertama, dan nilai baharu sebagai argumen kedua.
Contoh
| Kod | Penerangan |
|---|---|
|
tahun = 2019 bulan = Julai (bernombor dari 0) hari ke-4 jam minit saat |
5. Pemalar Calendarkelas
Medan tetap kelas Calendartidak terhad kepada bidang untuk menamakan elemen tarikh. Nampaknya ada medan untuk setiap kesempatan.
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
Sebagai contoh, terdapat medan tetap untuk merujuk kepada bulan:
Dan juga hari dalam seminggu:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
Kami tidak akan menyenaraikan semuanya. Kami hanya tidak mahu anda terkejut jika anda melihat pemalar seperti ini dalam kod.
Menggunakan pemalar menjadikan kod lebih mudah dibaca, itulah sebabnya pengaturcara menggunakannya. Dan bulan dinomborkan dari sifar juga untuk meningkatkan kebolehbacaan. Atau tidak.
6. Menukar tarikh dalam Calendarobjek
Kelas Calendarmempunyai kaedah yang membolehkan anda beroperasi pada tarikh dengan cara yang lebih bijak. Sebagai contoh, anda boleh menambah setahun, sebulan atau beberapa hari pada tarikh. Atau bawa mereka pergi. Kaedah ini dipanggil add(). Bekerja dengannya kelihatan seperti ini:
calendar.add(Calendar.MONTH, value);
Di mana calendarpembolehubah Calendar, dan MONTHmerupakan medan tetap kelas Calendar.
Apabila bekerja dengan addkaedah, anda lulus salah satu Calendarmedan tetap kelas sebagai argumen pertama, dan sebagai argumen kedua — nilai baharu yang akan ditambah.
Ini adalah satu lagi kaedah pintar. Mari lihat betapa pintarnya:
| Kod |
|---|
|
| Output konsol |
|
Kaedah ini difahamkan hanya ada 28 hari pada Februari 2019, jadi tarikh terhasil ialah 1 Mac.
Sekarang mari ambil 2 bulan! Apa yang patut kita dapat? 27 Disember 2018! Jom semak sekarang.
Untuk melaksanakan operasi yang menghasilkan tarikh yang lebih awal, anda perlu menghantar nilai negatif kepada add()kaedah:
| Kod |
|---|
|
| Output konsol |
|
Ianya berfungsi!
Kaedah ini mengambil kira panjang bulan dan tahun lompat yang berbeza. Secara keseluruhannya, kaedah yang hebat. Itulah yang diperlukan oleh kebanyakan pengaturcara yang bekerja dengan tarikh.
7. Elemen bergolek kurma
Tetapi kadang-kadang terdapat situasi apabila kita tidak mahu tingkah laku pintar ini, contohnya anda ingin melakukan sesuatu pada satu bahagian tarikh tanpa mengubah segala-galanya.
Kelas Calendarmempunyai kaedah khas roll()untuk ini. Tandatangannya sama seperti add()kaedah, tetapi kaedah ini hanya mengubah satu elemen tarikh, meninggalkan yang lain tidak berubah.
Contoh:
| Kod |
|---|
|
| Output konsol |
|
Kami menukar bulan, tetapi tahun dan tarikh kekal tidak berubah.
GO TO FULL VERSION