1. Memperkenalkan API Masa Tarikh
Pencipta Java tidak menyukai situasi dengan kelas Tarikh dan Kalendar. Mereka baik pada zaman mereka, tetapi masa berubah. Dan sesuatu yang mudah, berkuasa dan boleh dipercayai menjadi perlu. Dan dengan keluaran Java 8 (15 tahun selepas Calendar
muncul), Java Date Time API telah diperkenalkan. Ia adalah satu set kelas yang sepatutnya dapat menyelesaikan setiap kemungkinan tugas yang berkaitan dengan masa.
Terdapat begitu banyak kelas sehingga mereka dibahagikan kepada beberapa pakej:
Pakej tersebut java.time
ialah pakej asas untuk Java Date Time API: ia mengandungi kelas seperti LocalDate
, LocalTime
, LocalDateTime
, Instant
, Period
, dan Duration
. Semua objek kelas ini adalah immutable
, yang bermaksud ia tidak boleh ditukar selepas penciptaan.
Pakej ini java.time.format
mengandungi kelas untuk pemformatan masa, iaitu menukar masa (dan tarikh) kepada rentetan dan sebaliknya. Sebagai contoh, ia mengandungi DateTimeFormatter
kelas serba boleh, yang menggantikan SimpleDateFormat
kelas.
Pakej ini java.time.zone
mengandungi kelas untuk bekerja dengan zon waktu. Ia mengandungi kelas seperti TimeZone
dan ZonedDateTime
. Jika anda menulis kod pelayan untuk pelanggan yang terletak di bahagian lain di dunia, anda benar-benar memerlukan kelas ini.
2. LocalDate
kelas
Kelas pertama dan paling berguna daripada API Masa Tarikh yang akan kita lihat ialah kelas LocalDate
. Seperti yang anda mungkin boleh meneka dari namanya, kelas ini direka bentuk untuk berfungsi dengan tarikh.
Objek kelas ini tidak berubah selepas ia dicipta, iaitu kelas LocalDate
tidak boleh diubah. Tetapi sifat ini menambah kesederhanaan dan kebolehpercayaan kepada kelas. Terutama jika beberapa utas (benang pelaksanaan) berinteraksi dengan objek sedemikian pada masa yang sama.
Untuk mencipta LocalDate
objek baharu, anda perlu menggunakan salah satu kaedah statik. Berikut adalah senarai yang utama.
Mendapat tarikh semasa
Untuk mendapatkan tarikh semasa, anda perlu menggunakan now()
kaedah statik. Ini lebih mudah daripada yang kelihatan:
LocalDate today = LocalDate.now();
Di mana today
pembolehubah LocalDate
, dan LocalDate.now()
merupakan panggilan kepada now()
kaedah statik kelas LocalDate
.
Contoh:
Kod | Output konsol |
---|---|
|
|
Mendapatkan tarikh dalam zon waktu tertentu
Kelas LocalDate
juga mempunyai variasi kaedah now(ZoneId)
yang membolehkan anda mendapatkan tarikh semasa dalam zon waktu tertentu.
Untuk melakukan ini, kita memerlukan kelas lain — ZoneId
kelas (java.time.ZoneId). Ia mempunyai of()
kaedah yang mengembalikan ZoneId
objek yang diberi nama zon waktu.
Untuk menentukan tarikh semasa di Shanghai, anda perlu menulis kod berikut:
Kod | Output konsol |
---|---|
|
|
Anda boleh mencari senarai nama semua zon waktu di Internet.
3. Mendapat tarikh tertentu
Untuk mendapatkan LocalDate
objek yang mewakili tarikh tertentu, anda perlu menggunakan of()
kaedah statik. Segala-galanya di sini juga sangat mudah dan jelas:
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
Di mana date
pembolehubah LocalDate
, dan merupakan panggilan kepada kaedah statik kelas .LocalDate.of()
of()
LocalDate
Di sini kita melihat FEBRUARY
pemalar kelas Month
(java.time.Month) digunakan untuk menentukan Februari sebagai bulan.
Anda juga boleh menentukan bulan dengan cara lama — menggunakan nombor:
LocalDate date = LocalDate.of(2019, 2, 22);
dua? Daripada bulan Februari? Adakah itu bermakna bulan sekali lagi dinomborkan daripada satu?
Ya, hampir 20 tahun selepas penciptaan Java, bulan akhirnya berhenti dinomborkan daripada sifar.
Contoh:
Kod | Output konsol |
---|---|
|
|
Mendapatkan tarikh mengikut indeks hari itu
Terdapat satu lagi cara yang menarik untuk membuat tarikh: menggunakan ofYearDay
kaedah tersebut, anda boleh mendapatkan tarikh berdasarkan hanya pada bilangan tahun dan indeks hari dalam tahun tersebut. Berikut adalah penampilan umum:
LocalDate date = LocalDate.ofYearDay(year, day);
Di manakah year
bilangan tahun dan day
indeks hari dalam tahun tersebut.
Contoh:
Kod | Output konsol |
---|---|
|
|
Hari ke-100 tahun 2019 ialah 10 April.
Mendapat tarikh Unix
Adakah anda masih ingat bahawa Date
objek sentiasa menyimpan masa sebagai bilangan milisaat sejak 1 Januari 1970? Untuk memastikan pengaturcara tidak akan terlepas zaman yang indah, LocalDate
kelas mendapat ofEpochDay()
kaedah, yang mengembalikan tarikh yang dikira dari 1 Januari 1970. Berikut ialah penampilan umum:
LocalDate date = LocalDate.ofEpochDay(day);
Di manakah day
bilangan hari yang telah berlalu sejak 1 Januari 1970.
Contoh:
Kod | Output konsol |
---|---|
|
|
4. Mendapatkan unsur tarikh
Tidak mustahil untuk menukar LocalDate
objek, tetapi anda boleh mendapatkan elemen individu tarikh yang disimpan. LocalDate
objek mempunyai beberapa kaedah untuk ini:
Kaedah | Penerangan |
---|---|
|
Mengembalikan tahun tarikh tertentu |
|
Mengembalikan bulan tarikh: salah satu daripada beberapa pemalarJANUARY, FEBRUARY, ...; |
|
Mengembalikan indeks bulan tarikh. Januari == 1. |
|
Mengembalikan indeks hari dalam sebulan |
|
Mengembalikan indeks hari dari awal tahun |
|
Mengembalikan hari dalam seminggu: salah satu daripada beberapa pemalarMONDAY, TUESDAY, ...; |
|
Mengembalikan era: sama ada BCE (Sebelum Era Semasa) dan CE (Era Semasa) |
Contoh:
Kod | Output konsol |
---|---|
|
|
5. Menukar tarikh dalam LocalDate
objek
Kelas LocalDate
mengandungi beberapa kaedah yang membolehkan anda bekerja dengan tarikh. Pelaksanaan kaedah ini adalah serupa dengan kaedah kelas String
: mereka tidak mengubah LocalDate
objek sedia ada, sebaliknya mengembalikan yang baru dengan data yang dikehendaki.
Berikut adalah kaedah kelas LocalDate
:
Kaedah | Penerangan |
---|---|
|
Menambah bilangan hari yang ditentukan pada tarikh tersebut |
|
Menambah minggu ke tarikh |
|
Menambah bulan pada tarikh |
|
Menambah tahun pada tarikh |
|
Menolak hari dari tarikh |
|
Menolak minggu dari tarikh |
|
Menolak bulan dari tarikh |
|
Menolak tahun dari tarikh |
Contoh:
Kod | Output konsol |
---|---|
|
|
Kaedah birthday object
yang kami panggil tidak berubah. Sebaliknya, kaedahnya mengembalikan objek baharu yang mengandungi data yang dikehendaki.
GO TO FULL VERSION