Sử dụng một trong hai Joda thời gian hoặc gói java.time mới trong Java 8.
java.time
Khung java.time xây dựng vào Java 8 và sau đó có một lớp Period
để đại diện cho một khoảng thời gian như một số năm, một số tháng, và một số ngày. Nhưng lớp học này được giới hạn trong cả ngày, không đại diện cho giờ, phút và giây.
Lưu ý rằng chúng tôi chỉ định múi giờ, rất quan trọng để xác định ngày. Ví dụ: một ngày mới xuất hiện sớm hơn trong Paris so với số Montréal.
ZoneId zoneId = ZoneId.of("America/Montreal");
LocalDate now = LocalDate.now(zoneId);
LocalDate then = LocalDate.of(2001, 1, 1);
Period period = Period.between(then, now);
Sau đó: 2001-01-01. Bây giờ: 2015-09-07. Thời gian: P14Y8M6D. Ngày: 5362
Trong cả ngày, sau đó Daylight Saving Time (DST) không liên quan.
Nếu bạn muốn đếm tổng số ngày, hãy sử dụng enum ChronoUnit
bao gồm một số phương pháp tính toán. Lưu ý các phép tính trả về một thời gian dài.
long days = ChronoUnit.DAYS.between(then, now); // "5362" seen above.
I have asked về làm một giai đoạn đầy đủ trong java.time, bao gồm giờ, phút, giây. Không thể sử dụng Java 8. Một giải pháp đáng ngạc nhiên khi sử dụng thư viện được nhóm was suggested bởi Meno Hochschild: Sử dụng lớp Duration
được tìm thấy trong số javax.xml.datatype package.
Joda-Time
Dưới đây là một số mã ví dụ trong Joda-Time 2.3.
DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris");
DateTime start = new DateTime(2014, 1, 2, 3, 4, 5, timeZone);
DateTime stop = new DateTime(2014, 5, 2, 3, 4, 5, timeZone);
Period period = new Period(start, stop);
Calling toString
sẽ giúp bạn có một chuỗi đại diện theo mẫu quy định của tiêu chuẩn ISO 8601, PnYnMnDTnHnMnS
.
Xem http://www.xmission.com/~goodhill/dates/deltaDates.html để biết một số thông tin cơ bản. –
Đó là một bài viết hay. Cảm ơn! – Anirudh
@Anirudh Tìm kiếm StackOverflow cho "joda" và thuật ngữ như "span", "Interval", "Duration", "Period". Bạn sẽ tìm thấy nhiều ví dụ với thảo luận. –