1. Bertukar daripada Date
kelas kepada Calendar
kelas
Pengaturcara menyukai Date
kelas kerana kesederhanaan dan sokongan untuk piawaian Unix, tetapi seperti yang anda tahu, setiap mawar mempunyai durinya.
Pengaturcara mahukan Date
kelas "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 Calendar
ialah java.util.Calendar. Jangan lupa untuk menambahkannya pada pernyataan import jika anda memutuskan untuk menggunakannya dalam kod anda.
Anda boleh membuat Calendar
objek dengan arahan ini:
Calendar date = Calendar.getInstance();
Kaedah statik getInstance()
kelas Calendar
mencipta Calendar
objek 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 Calendar
menyokong 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 GregorianCalendar
setiap masa. Sebaliknya Calendar
, anda juga boleh menulis GregorianCalendar
— itu juga akan berfungsi. Tetapi menulis hanya Calendar
lebih 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 SimpleDateFormat
objek untuk memaparkan kalendar, tetapi sehingga kami mengkajinya, anda boleh menggunakan penggodaman hayat ini.
Date date = calendar.getTime();
Objek Calendar
boleh ditukar dengan mudah kepada Date
objek, dan anda sudah tahu cara memaparkan Date
objek. Anda boleh menggunakan kod seperti ini untuk menukar Calendar
objek 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 Calendar
mempunyai get()
kaedah. Ia adalah satu kaedah, tetapi ia mempunyai parameter:
int month = calendar.get(Calendar.MONTH);
Di mana calendar
pembolehubah Calendar
, dan MONTH
merupakan medan tetap kelas Calendar
.
Anda lulus salah satu Calendar
medan tetap kelas sebagai hujah kepada get
kaedah, 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 set
kaedah:
calendar.set(Calendar.MONTH, value);
Di mana calendar
pembolehubah Calendar
, dan MONTH
merupakan medan tetap kelas Calendar
.
Apabila bekerja dengan set
kaedah, anda lulus salah satu Calendar
medan 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 Calendar
kelas
Medan tetap kelas Calendar
tidak 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 Calendar
objek
Kelas Calendar
mempunyai 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 calendar
pembolehubah Calendar
, dan MONTH
merupakan medan tetap kelas Calendar
.
Apabila bekerja dengan add
kaedah, anda lulus salah satu Calendar
medan 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 Calendar
mempunyai 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