Saya mencoba membandingkan tanggal dalam format String dengan tanggal saat ini. Beginilah cara saya melakukannya (belum diuji, tetapi seharusnya berfungsi), tetapi saya menggunakan metode yang sudah usang. Ada saran bagus untuk alternatif? Terima kasih.
PS Saya sangat benci melakukan hal-hal Kencan di Jawa. Ada begitu banyak cara untuk melakukan hal yang sama, sehingga Anda benar-benar tidak yakin mana yang benar, maka pertanyaan saya di sini.
String valid_until = "1/1/1990";
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
Date strDate = sdf.parse(valid_until);
int year = strDate.getYear(); // this is deprecated
int month = strDate.getMonth() // this is deprecated
int day = strDate.getDay(); // this is deprecated
Calendar validDate = Calendar.getInstance();
validDate.set(year, month, day);
Calendar currentDate = Calendar.getInstance();
if (currentDate.after(validDate)) {
catalog_outdated = 1;
}
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 .Jawaban:
Kode Anda dapat dikurangi menjadi
atau
sumber
Anda dapat menggunakan bandingkanTo ()
sumber
java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan, digantikan oleh java.time kelas. Sebagian besar fungsionalitas java.time di -back-port ke Java 6 & Java 7 dalam proyek ThreeTen-Backport . Diadaptasi lebih lanjut untuk Android sebelumnya (<26) di ThreeTenABP . Lihat Cara menggunakan ThreeTenABP… .Anda dapat langsung membuat
Calendar
dariDate
:sumber
Perhatikan bahwa format yang benar adalah ("dd / MM / yyyy") sebelum kode berfungsi. "mm" artinya minuts!
sumber
sumber
java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan, digantikan oleh java.time kelas. Sebagian besar fungsionalitas java.time di -back-port ke Java 6 & Java 7 dalam proyek ThreeTen-Backport . Diadaptasi lebih lanjut untuk Android sebelumnya (<26) di ThreeTenABP . Lihat Cara menggunakan ThreeTenABP… .itu mengembalikan true .. dan Anda juga dapat memeriksa sebelum dan sama dengan bantuan date.before dan date.equal ..
sumber
Membandingkan waktu yang diwakili oleh Kalender ini dengan yang diwakili oleh Kalender tertentu.
Mengembalikan 0 jika waktu kedua Kalender sama, -1 jika waktu Kalender ini sebelum yang lain, 1 jika waktu Kalender ini setelah yang lain.
sumber
ubah tanggal menjadi Kalender dan buat perhitungan Anda di sana. :)
Atau:
sumber
Saatnya untuk jawaban modern.
java.time dan ThreeTenABP
Ketika saya menjalankan kode ini sekarang, hasilnya adalah:
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 memberikanZoneOffset.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
danDate
, semuanya dirancang dengan buruk dan untungnya sudah lama usang. Juga meskipun nama aDate
tidak mewakili tanggal, tetapi suatu titik waktu. Salah satu konsekuensi dari ini adalah: meskipun hari ini adalah 15 Februari 2019, baru dibuatDate
objek sudah setelah (sehingga tidak sama dengan) sebuahDate
objek dari parsing15/02/2019
. Ini membingungkan beberapa orang. Berlawanan dengan ini, modernLocalDate
adalah tanggal tanpa waktu (dan tanpa zona waktu), jadi duaLocalDate
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 .
org.threeten.bp
dengan subpaket.Tautan
java.time
pertama kali dijelaskan.java.time
ke Java 6 dan 7 (ThreeTen untuk JSR-310).sumber
Anda bisa mencoba ini
dan Anda bisa menggunakan
today.getTime()
untuk mengambil nilai dan membandingkan.sumber
Terkadang kita perlu membuat daftar dengan tanggal, seperti
hari ini dengan jam
kemarin dengan kemarin
hari lain dengan 23/06/2017
Untuk membuatnya, kita perlu membandingkan waktu saat ini dengan data kita.
Anda juga dapat memeriksa contoh ini di GitHub dan posting ini .
sumber
Update: The Joda-Time perpustakaan sekarang dalam pemeliharaan-mode, dan merekomendasikan bermigrasi ke java.time kerangka yang berhasil itu. Lihat Jawaban oleh Ole VV .
Waktu Joda
Kelas java.util.Date dan .Calendar sangat merepotkan. Hindari mereka. Gunakan Joda-Time atau paket java.time baru di Java 8.
LocalDate
Jika Anda ingin tanggal-saja tanpa waktu-hari, gunakan kelas LocalDate.
Zona waktu
Mendapatkan tanggal saat ini tergantung pada zona waktu. Tanggal baru bergulir di Paris sebelum Montréal. Tentukan zona waktu yang diinginkan daripada bergantung pada default JVM.
Contoh di Joda-Time 2.3.
sumber
Anda dapat menggunakan validDate.setTime (strDate) Lihat javadoc di http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html
sumber
sumber
Di Kotlin, Anda dapat dengan mudah membandingkan tanggal dengan membandingkan operator. Karena Kotlin sudah mendukung operator overloading. Jadi untuk membandingkan objek tanggal:
dan jika Anda menggunakan objek kalender, Anda dapat dengan mudah membandingkannya seperti ini:
sumber