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.UTCselama 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,, SimpleDateFormatdan Date, semuanya dirancang dengan buruk dan untungnya sudah lama usang. Juga meskipun nama a Datetidak mewakili tanggal, tetapi suatu titik waktu. Salah satu konsekuensi dari ini adalah: meskipun hari ini adalah 15 Februari 2019, baru dibuat Dateobjek sudah setelah (sehingga tidak sama dengan) sebuah Dateobjek dari parsing 15/02/2019. Ini membingungkan beberapa orang. Berlawanan dengan ini, modern LocalDateadalah tanggal tanpa waktu (dan tanpa zona waktu), jadi dua LocalDates 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.bpdengan subpaket.
Tautan
Calendar,SimpleDateFormat,Dateatau 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 .