tl; Dr.
java.time.temporal.ChronoUnit.DAYS.between(
earlier.toLocalDate(),
later.toLocalDate()
)
…veya…
java.time.temporal.ChronoUnit.HOURS.between(
earlier.truncatedTo( ChronoUnit.HOURS ) ,
later.truncatedTo( ChronoUnit.HOURS )
)
java.time
FYI, Joda-Time projesi şu anda bakım modunda ve ekip java.time sınıflarına geçişi tavsiye ediyor .
Joda-Time eşdeğer DateTime
olduğunu ZonedDateTime
.
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime now = ZonedDateTime.now( z ) ;
Görünüşe göre günleri tarihe göre saymak istiyorsunuz, yani günün saatini yok saymak istiyorsunuz. Örneğin, gece yarısından bir dakika önce başlamak ve gece yarısından bir dakika sonra sona ermek tek bir günle sonuçlanmalıdır. Bu davranışa, bir ayıklamak LocalDate
, hesabınızla ilgili ZonedDateTime
. LocalDate
Sınıf zaman günün-ve saat dilimi bulunmayan olmadan tarih salt değerini temsil eder.
LocalDate localDateStart = zdtStart.toLocalDate() ;
LocalDate localDateStop = zdtStop.toLocalDate() ;
ChronoUnit
Geçen günleri veya diğer birimleri hesaplamak için numaralandırmayı kullanın .
long days = ChronoUnit.DAYS.between( localDateStart , localDateStop ) ;
truncate
Altmış dakikalık zaman aralığı olarak tam saat yerine saatin delta'sı ile ilgileniyorsanız bu sayımı yapmanın daha genel bir yolunu sormak için truncatedTo
yöntemi kullanın .
Aynı gün 14:45 - 15:12 örnekleriniz.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime start = ZonedDateTime.of( 2017 , 1 , 17 , 14 , 45 , 0 , 0 , z );
ZonedDateTime stop = ZonedDateTime.of( 2017 , 1 , 17 , 15 , 12 , 0 , 0 , z );
long hours = ChronoUnit.HOURS.between( start.truncatedTo( ChronoUnit.HOURS ) , stop.truncatedTo( ChronoUnit.HOURS ) );
1
Bu günlerce çalışmaz. Bu durumda toLocalDate () öğesini kullanın.
Hakkında java.time
Java.time çerçevesi daha sonra Java 8 ve yerleşiktir. Bu sınıflar zahmetli eski yerini mirası gibi tarih-saat sınıfları java.util.Date
, Calendar
& SimpleDateFormat
.
Artık bakım modunda olan Joda-Time projesi java.time sınıflarına geçişi tavsiye ediyor .
Daha fazla bilgi için Oracle Eğiticisine bakın . Ve birçok örnek ve açıklama için Stack Overflow'da arama yapın. Spesifikasyon JSR 310'dur .
Sen değiştirebilir java.time sizin veritabanı ile doğrudan nesneleri. JDBC 4.2 veya üzeri ile uyumlu bir JDBC sürücüsü kullanın . Dizeye gerek yok, sınıflara gerek yok .java.sql.*
Java.time sınıflarını nereden edinebilirsiniz?
ThreeTen-Ekstra proje ek sınıfları ile java.time uzanır. Bu proje, java.time'a gelecekteki olası eklemeler için bir kanıt zeminidir. Burada bazı yararlı sınıfları gibi bulabilir Interval
, YearWeek
, YearQuarter
, ve daha .
ThreeTen-Ekstra proje ek sınıfları ile java.time uzanır. Bu proje, java.time'a gelecekteki olası eklemeler için bir kanıt zeminidir. Burada bazı yararlı sınıfları gibi bulabilir Interval
, YearWeek
, YearQuarter
, ve daha .
Days.daysBetween
Yanlış olduğunu düşündüğünüz belirli verilerle örnek bir durum sunabilir misiniz ?