TL; DR
java.time.temporal.ChronoUnit.DAYS.between(
earlier.toLocalDate(),
later.toLocalDate()
)
…หรือ…
java.time.temporal.ChronoUnit.HOURS.between(
earlier.truncatedTo( ChronoUnit.HOURS ) ,
later.truncatedTo( ChronoUnit.HOURS )
)
java.time
FYI โครงการJoda-Timeขณะนี้อยู่ในโหมดบำรุงรักษาโดยทีมงานให้คำแนะนำการย้ายถิ่นไปยังคลาสjava.time
เทียบเท่า Joda เวลาคือDateTime
ZonedDateTime
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime now = ZonedDateTime.now( z ) ;
เห็นได้ชัดว่าคุณต้องการที่จะนับวันตามวันที่หมายถึงคุณต้องการที่จะไม่สนใจเวลาของวัน ตัวอย่างเช่นการเริ่มต้นหนึ่งนาทีก่อนเที่ยงคืนและสิ้นสุดหนึ่งนาทีหลังเที่ยงคืนควรทำให้เกิดวันเดียว สำหรับพฤติกรรมนี้แยกจากLocalDate
ชั้นหมายถึงค่าวันเท่านั้นโดยไม่ต้องเวลาของวันและไม่มีโซนเวลาZonedDateTime
LocalDate
LocalDate localDateStart = zdtStart.toLocalDate() ;
LocalDate localDateStop = zdtStop.toLocalDate() ;
ใช้ChronoUnit
enum เพื่อคำนวณวันที่ผ่านไปหรือหน่วยอื่น ๆ
long days = ChronoUnit.DAYS.between( localDateStart , localDateStop ) ;
ตัด
สำหรับคุณที่ถามเกี่ยวกับวิธีการทั่วไปในการนับจำนวนนี้มากขึ้นโดยที่คุณสนใจเดลต้าชั่วโมงเป็นชั่วโมงต่อชั่วโมงแทนที่จะเป็นชั่วโมงที่สมบูรณ์ในช่วงเวลาหกสิบนาทีให้ใช้truncatedTo
วิธีนี้
นี่คือตัวอย่างของคุณ 14:45 ถึง 15:12 ในวันเดียวกัน
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
สิ่งนี้ไม่ทำงานหลายวัน ใช้ toLocalDate () ในกรณีนี้
เกี่ยวกับjava.time
java.timeกรอบถูกสร้างขึ้นใน Java 8 และต่อมา ชั้นเรียนเหล่านี้แย่งลำบากเก่ามรดกเรียนวันที่เวลาเช่นjava.util.Date
, และCalendar
SimpleDateFormat
Joda เวลาโครงการขณะนี้อยู่ในโหมดการบำรุงรักษาให้คำแนะนำแก่การโยกย้ายไปยังjava.timeชั้นเรียน
ต้องการเรียนรู้เพิ่มเติมโปรดดูที่ออราเคิลกวดวิชา และค้นหา Stack Overflow สำหรับตัวอย่างและคำอธิบายมากมาย สเปกJSR 310
คุณสามารถแลกเปลี่ยนวัตถุjava.timeโดยตรงกับฐานข้อมูลของคุณ ใช้ไดรเวอร์ JDBC ที่สอดคล้องกับJDBC 4.2หรือใหม่กว่า ไม่จำเป็นต้องใช้สตริงไม่จำเป็นต้องมีjava.sql.*
คลาส
จะรับคลาส java.time ได้ที่ไหน?
โครงการThreeTen-Extraขยาย java.time ด้วยคลาสเพิ่มเติม โครงการนี้เป็นพื้นฐานที่พิสูจน์ได้สำหรับการเพิ่มเติมในอนาคตไปยัง java.time คุณอาจพบว่าการเรียนที่มีประโยชน์บางอย่างที่นี่เช่นInterval
, YearWeek
, YearQuarter
และอื่น ๆ อีกมากมาย
โครงการThreeTen-Extraขยาย java.time ด้วยคลาสเพิ่มเติม โครงการนี้เป็นพื้นฐานที่พิสูจน์ได้สำหรับการเพิ่มเติมในอนาคตไปยัง java.time คุณอาจพบว่าการเรียนที่มีประโยชน์บางอย่างที่นี่เช่นInterval
, YearWeek
, YearQuarter
และอื่น ๆ อีกมากมาย
Days.daysBetween
ไม่ถูกต้องได้หรือไม่?