Saya tahu ada banyak pertanyaan di SO tentang cara mendapatkan, tapi saya ingin dan contoh menggunakan Java 8 Date api baru. Saya juga tahu perpustakaan JodaTime, tapi saya ingin cara kerja tanpa perpustakaan eksternal.
Fungsi perlu mengeluh dengan pembatasan ini:
- Mencegah kesalahan dari savelime tanggal
- Input adalah dua objek Date (tanpa waktu, saya tahu waktu lokal, tapi saya harus lakukan dengan instance date)
DAYS.between(localDate1, localDate2)
.Jawaban:
Jika Anda ingin hari kalender logis , gunakan
DAYS.between()
metode darijava.time.temporal.ChronoUnit
:Jika Anda ingin 24 jam sehari , ( durasi ), Anda dapat menggunakan
Duration
kelas sebagai gantinya:Untuk informasi lebih lanjut, lihat dokumen ini .
sumber
Duration.between(today.atTime(0, 0), yesterday.atTime(0, 0)).toDays()
.today.atTime(0, 0)
bisa Anda lakukantoday.atStartOfDay()
.ChronoUnit.DAYS.between(firstDate, secondDate)
Berdasarkan komentar VGR di sini adalah apa yang dapat Anda gunakan:
sumber
Anda bisa menggunakan
until()
:sumber
until
adalah bahwa ia mengembalikan objek Periode . Itu akan mengembalikan beberapa tahun / bulan / hari antara dua tanggal, bukan jumlah hari yang sebenarnya. Dan getDays () pada Periode hanya mengembalikan bagian hari (tidak memperhitungkan jumlah tahun atau bulan), daripada jumlah total hari. Versi kedua berfungsi persis seperti yang diinginkan untuk mendapatkan jumlah hari antara dua tanggal.Anda dapat menggunakan
DAYS.between
darijava.time.temporal.ChronoUnit
misalnya
sumber
Kita dapat menggunakan metode between () dari ChronoUnit enum:
ChronoUnit.DAYS menghitung hari yang diselesaikan 24 jam .
sumber
Gunakan DAYS di enum java.time.temporal.ChronoUnit . Di bawah ini adalah Kode Contoh:
Output: * Jumlah hari antara tanggal mulai: 2015-03-01 dan tanggal akhir: 2016-03-03 adalah ==> 368. ** Jumlah hari antara tanggal mulai: 2016-03-03 dan tanggal akhir: 2015-03-01 adalah ==> -368 *
sumber
Semua orang mengatakan untuk menggunakan ChronoUnit.DAYS.between tetapi itu hanya mendelegasikan ke metode lain yang bisa Anda sebut sendiri. Jadi bisa juga Anda lakukan
firstDate.until(secondDate, ChronoUnit.DAYS)
.Dokumen untuk keduanya sebenarnya menyebutkan kedua pendekatan dan mengatakan untuk menggunakan mana yang lebih mudah dibaca.
sumber
Ini dia:
sumber
Dapatkan beberapa hari sebelum Natal dari hari ini, coba ini
sumber
Jika tujuannya hanya untuk mendapatkan perbedaan dalam berhari-hari dan karena jawaban di atas menyebutkan tentang metode delegasi ingin menunjukkan bahwa dulu juga bisa menggunakan -
sumber
sumber
Saya tahu pertanyaan ini untuk Java 8, tetapi dengan Java 9 Anda dapat menggunakan:
sumber
Gunakan kelas atau metode yang paling memenuhi kebutuhan Anda:
A Durasi mengukur jumlah waktu menggunakan nilai-nilai berbasis waktu (detik, nanodetik).
Periode menggunakan nilai berbasis tanggal (tahun, bulan, hari).
Metode ChronoUnit.between berguna ketika Anda ingin mengukur jumlah waktu dalam satu unit waktu saja, seperti hari atau detik.
https://docs.oracle.com/javase/tutorial/datetime/iso/ Period.html
sumber