Saatnya untuk jawaban modern.
java.time dan ThreeTenABP
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");
String validUntil = "1/1/1990";
LocalDate validDate = LocalDate.parse(validUntil, dateFormatter);
LocalDate currentDate = LocalDate.now(ZoneId.of("Pacific/Efate"));
if (currentDate.isAfter(validDate)) {
System.out.println("Catalog is outdated");
}
Ketika saya menjalankan kode ini sekarang, hasilnya adalah:
Katalog sudah usang
Karena tidak pernah ada tanggal yang sama di semua zona waktu, berikan zona waktu yang eksplisit ke LocalDate.now
. Jika Anda ingin katalog kedaluwarsa pada waktu yang sama di semua zona waktu, Anda dapat memberikan ZoneOffset.UTC
selama Anda memberi tahu pengguna bahwa Anda menggunakan UTC.
Saya menggunakan java.time, API tanggal dan waktu Java modern. Kelas tanggal-waktu yang Anda gunakan Calendar
,, SimpleDateFormat
dan Date
, semuanya dirancang dengan buruk dan untungnya sudah lama usang. Juga meskipun nama a Date
tidak mewakili tanggal, tetapi suatu titik waktu. Salah satu konsekuensi dari ini adalah: meskipun hari ini adalah 15 Februari 2019, baru dibuat Date
objek sudah setelah (sehingga tidak sama dengan) sebuah Date
objek dari parsing 15/02/2019
. Ini membingungkan beberapa orang. Berlawanan dengan ini, modern LocalDate
adalah tanggal tanpa waktu (dan tanpa zona waktu), jadi dua LocalDate
s yang mewakili tanggal hari ini akan selalu sama.
Pertanyaan: Bisakah saya menggunakan java.time di Android?
Ya, java.time berfungsi dengan baik di perangkat Android yang lebih lama dan lebih baru. Ini hanya membutuhkan setidaknya Java 6 .
- Di Java 8 dan yang lebih baru dan pada perangkat Android yang lebih baru (dari API level 26), API modern sudah ada di dalamnya.
- Di Java 6 dan 7 dapatkan ThreeTen Backport, backport kelas modern (ThreeTen untuk JSR 310; lihat link di bagian bawah).
- Di Android (lebih lama), gunakan ThreeTen Backport edisi Android. Ini disebut ThreeTenABP. Dan pastikan Anda mengimpor kelas tanggal dan waktu dari
org.threeten.bp
dengan subpaket.
Tautan
Calendar
,SimpleDateFormat
,Date
atau salah satu usang tanggal Jawa dan waktu kelas panjang lainnya. Sebagai gantinya gunakanjava.time
, API tanggal dan waktu Java modern . Ya, Anda dapat menggunakannya di Android. Untuk Android yang lebih lama, lihat Cara menggunakan ThreeTenABP di Proyek Android .