Bagaimana cara menemukan perbedaan dalam Days antara dua instance Joda-Time DateTime
? Dengan 'perbedaan hari' maksud saya jika mulai pada hari Senin dan akhir pada hari Selasa saya mengharapkan nilai pengembalian 1 terlepas dari jam / menit / detik dari tanggal mulai dan berakhir.
Days.daysBetween(start, end).getDays()
memberi saya 0 jika mulai di malam hari dan berakhir di pagi hari.
Saya juga mengalami masalah yang sama dengan bidang tanggal lainnya sehingga saya berharap akan ada cara umum untuk 'mengabaikan' bidang yang kurang penting.
Dengan kata lain, bulan antara Februari dan 4 Maret juga akan menjadi 1, seperti halnya jam antara 14:45 dan 15:12. Namun perbedaan jam antara 14:01 dan 14:55 adalah 0.
Days.daysBetween
tidak benar?Instant
, Anda tidak hanya berbicara tentangstart.toInstant()
, bukan?Days
KelasMenggunakan
Days
kelas denganwithTimeAtStartOfDay
metode harus bekerja:sumber
toDateMidnight()
dari jenis DateTime sudah usang.end
sebelumstart
, apakah mengembalikan hari negatif?Anda bisa menggunakan
LocalDate
:sumber
toDateMidnight()
dari jenis DateTime sudah usang.new LocalDate(date)
berlebihandate.toLocalDate()
?tl; dr
…atau…
waktu java
FYI, proyek Joda-Time sekarang dalam mode pemeliharaan , dengan tim menyarankan migrasi ke kelas java.time .
Setara dengan Joda-Time
DateTime
adalahZonedDateTime
.Tampaknya Anda ingin menghitung hari berdasarkan tanggal, artinya Anda ingin mengabaikan waktu dalam sehari. Misalnya, mulai satu menit sebelum tengah malam dan berakhir satu menit setelah tengah malam akan menghasilkan dalam satu hari. Untuk perilaku ini, ekstrak a
LocalDate
dari AndaZonedDateTime
. TheLocalDate
kelas mewakili nilai tanggal-hanya tanpa waktu-of-hari dan tanpa zona waktu.Gunakan
ChronoUnit
enum untuk menghitung hari yang berlalu atau unit lainnya.Memotong
Adapun Anda bertanya tentang cara yang lebih umum untuk melakukan penghitungan ini di mana Anda tertarik delta jam sebagai jam-jam daripada jam lengkap sebagai rentang waktu enam puluh menit, gunakan
truncatedTo
metode ini.Ini adalah contoh Anda dari 14:45 sampai 15:12 pada hari yang sama.
Ini tidak berfungsi selama berhari-hari. Gunakan toLocalDate () dalam kasus ini.
Tentang java.time
The java.time kerangka dibangun ke Jawa 8 dan kemudian. Kelas-kelas ini menggantikan tua merepotkan warisan kelas tanggal-waktu seperti
java.util.Date
,Calendar
, &SimpleDateFormat
.Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke java.time kelas .
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasi adalah JSR 310 .
Anda dapat bertukar objek java.time secara langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu untuk string, tidak perlu untuk
java.sql.*
kelas.Di mana mendapatkan kelas java.time?
Proyek ThreeTen-Extra memperpanjang java.time dengan kelas tambahan. Proyek ini adalah ajang pembuktian untuk kemungkinan penambahan masa depan ke java.time. Anda mungkin menemukan beberapa kelas berguna di sini seperti
Interval
,YearWeek
,YearQuarter
, dan lebih .Proyek ThreeTen-Extra memperpanjang java.time dengan kelas tambahan. Proyek ini adalah ajang pembuktian untuk kemungkinan penambahan masa depan ke java.time. Anda mungkin menemukan beberapa kelas berguna di sini seperti
Interval
,YearWeek
,YearQuarter
, dan lebih .sumber
Jawaban yang diterima membangun dua
LocalDate
objek, yang cukup mahal jika Anda membaca banyak data. Saya menggunakan ini:Dengan menelepon
getMillis()
Anda menggunakan variabel yang sudah ada.MILLISECONDS.toDays()
kemudian, menggunakan perhitungan aritmatika sederhana, tidak membuat objek apa pun.sumber
java.time.Period
Gunakan
java.time.Period
kelas untuk menghitung hari .Karena Java 8 menghitung perbedaan lebih intuitif menggunakan
LocalDate
,LocalDateTime
untuk mewakili dua tanggalsumber
sumber
sumber