1. Memperkenalkan Date Time API
Pembuat Java tidak menyukai situasi dengan kelas Tanggal dan Kalender. Mereka bagus di zaman mereka, tetapi waktu berubah. Dan sesuatu yang sederhana, kuat, dan andal menjadi perlu. Dan dengan dirilisnya Java 8 (15 tahun setelah Calendar
kemunculannya), Java Date Time API diperkenalkan. Ini adalah sekumpulan kelas yang harus dapat menyelesaikan setiap kemungkinan tugas yang berhubungan dengan waktu.
Ada begitu banyak kelas yang dibagi menjadi beberapa paket:
Paket tersebut java.time
adalah paket dasar untuk Java Date Time API: berisi kelas-kelas seperti LocalDate
, LocalTime
, LocalDateTime
, Instant
, Period
, dan Duration
. Semua objek dari kelas ini adalah immutable
, yang artinya tidak dapat diubah setelah dibuat.
Paket tersebut java.time.format
berisi kelas-kelas untuk pemformatan waktu, yaitu mengonversi waktu (dan tanggal) menjadi string dan sebaliknya. Misalnya, berisi DateTimeFormatter
kelas serbaguna, yang menggantikan SimpleDateFormat
kelas.
Paket java.time.zone
berisi kelas untuk bekerja dengan zona waktu. Ini berisi kelas-kelas seperti TimeZone
dan ZonedDateTime
. Jika Anda menulis kode server untuk klien yang berlokasi di berbagai belahan dunia, Anda akan sangat membutuhkan kelas-kelas ini.
2. LocalDate
kelas
Kelas pertama dan paling berguna dari Date Time API yang akan kita lihat adalah kelasnya LocalDate
. Seperti yang mungkin bisa Anda tebak dari namanya, kelas ini dirancang untuk bekerja dengan tanggal.
Objek kelas ini tidak berubah setelah dibuat, artinya kelas LocalDate
tidak dapat diubah. Tetapi properti ini menambah kesederhanaan dan keandalan kelas. Apalagi jika beberapa utas (utas eksekusi) berinteraksi dengan objek seperti itu pada saat yang bersamaan.
Untuk membuat LocalDate
objek baru, Anda perlu menggunakan salah satu metode statis. Berikut adalah daftar yang utama.
Mendapatkan tanggal saat ini
Untuk mendapatkan tanggal saat ini, Anda perlu menggunakan now()
metode statis. Ini jauh lebih mudah daripada yang terlihat:
LocalDate today = LocalDate.now();
Di mana today
variabel LocalDate
, dan LocalDate.now()
merupakan panggilan ke now()
metode statis kelas LocalDate
.
Contoh:
Kode | Keluaran konsol |
---|---|
|
|
Mendapatkan tanggal di zona waktu tertentu
Kelas LocalDate
juga memiliki variasi metode now(ZoneId)
yang memungkinkan Anda mendapatkan tanggal saat ini di zona waktu tertentu.
Untuk melakukan ini, kita memerlukan kelas lain — ZoneId
kelas (java.time.ZoneId). Ini memiliki of()
metode yang mengembalikan ZoneId
objek yang diberi nama zona waktu.
Untuk menentukan tanggal sekarang di Shanghai, Anda perlu menulis kode berikut:
Kode | Keluaran konsol |
---|---|
|
|
Anda dapat menemukan daftar nama semua zona waktu di Internet.
3. Mendapatkan tanggal tertentu
Untuk mendapatkan LocalDate
objek yang mewakili tanggal tertentu, Anda perlu menggunakan of()
metode statis. Semuanya di sini juga sangat sederhana dan jelas:
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
Di mana date
variabel LocalDate
, dan merupakan panggilan ke metode statis kelas .LocalDate.of()
of()
LocalDate
Di sini kita melihat FEBRUARY
konstanta kelas Month
(java.time.Month) digunakan untuk menentukan Februari sebagai bulan.
Anda juga dapat menentukan bulan dengan cara kuno — menggunakan angka:
LocalDate date = LocalDate.of(2019, 2, 22);
Dua? Bukan Februari? Apakah itu berarti bulan sekali lagi diberi nomor dari satu?
Ya, hampir 20 tahun setelah pembuatan Java, bulan akhirnya berhenti diberi nomor dari nol.
Contoh:
Kode | Keluaran konsol |
---|---|
|
|
Mendapatkan tanggal berdasarkan indeks hari ini
Ada cara lain yang menarik untuk membuat tanggal: dengan menggunakan ofYearDay
metode ini, Anda bisa mendapatkan tanggal hanya berdasarkan angka tahun dan indeks hari dalam setahun. Berikut tampilan umumnya:
LocalDate date = LocalDate.ofYearDay(year, day);
Di mana year
angka tahun dan day
merupakan indeks hari dalam setahun.
Contoh:
Kode | Keluaran konsol |
---|---|
|
|
Hari ke-100 tahun 2019 adalah 10 April.
Mendapatkan tanggal Unix
Ingatkah Anda bahwa Date
objek selalu menyimpan waktu dalam hitungan milidetik sejak 1 Januari 1970? Untuk memastikan pemrogram tidak akan melewatkan masa lalu yang indah, LocalDate
kelas mendapatkan sebuah ofEpochDay()
metode, yang mengembalikan tanggal yang dihitung dari 1 Januari 1970. Berikut tampilan umumnya:
LocalDate date = LocalDate.ofEpochDay(day);
Dimana day
jumlah hari yang telah berlalu sejak 1 Januari 1970.
Contoh:
Kode | Keluaran konsol |
---|---|
|
|
4. Mendapatkan elemen kencan
Tidak mungkin mengubah LocalDate
objek, tetapi Anda bisa mendapatkan elemen individual dari tanggal yang disimpan. LocalDate
objek memiliki beberapa metode untuk ini:
metode | Keterangan |
---|---|
|
Mengembalikan tahun dari tanggal tertentu |
|
Mengembalikan tanggal bulan: salah satu dari beberapa konstantaJANUARY, FEBRUARY, ...; |
|
Mengembalikan indeks bulan tanggal. Januari == 1. |
|
Mengembalikan indeks hari dalam sebulan |
|
Mengembalikan indeks hari dari awal tahun |
|
Mengembalikan hari dalam seminggu: salah satu dari beberapa konstantaMONDAY, TUESDAY, ...; |
|
Mengembalikan era: baik BCE (Sebelum Era Saat Ini) dan CE (Era Saat Ini) |
Contoh:
Kode | Keluaran konsol |
---|---|
|
|
5. Mengubah tanggal pada suatu LocalDate
objek
Kelas LocalDate
berisi beberapa metode yang memungkinkan Anda bekerja dengan tanggal. Penerapan metode ini serupa dengan metode kelas String
: mereka tidak mengubah LocalDate
objek yang ada, melainkan mengembalikan objek baru dengan data yang diinginkan.
Berikut adalah metode kelas LocalDate
:
metode | Keterangan |
---|---|
|
Menambahkan jumlah hari tertentu ke tanggal |
|
Menambahkan minggu ke tanggal |
|
Menambahkan bulan ke tanggal |
|
Menambahkan tahun ke tanggal |
|
Mengurangi hari dari tanggal |
|
Kurangi minggu dari tanggal |
|
Mengurangi bulan dari tanggal |
|
Kurangi tahun dari tanggal |
Contoh:
Kode | Keluaran konsol |
---|---|
|
|
Metode siapa birthday object
yang kita panggil tidak berubah. Sebaliknya, metodenya mengembalikan objek baru yang berisi data yang diinginkan.
GO TO FULL VERSION