2015-06-14 100 views
19

Đối với Period tính sau:Cách tính số ngày trong một khoảng thời gian?

Period.between(LocalDate.of(2015, 8, 1), LocalDate.of(2015, 9, 2)) 

kết quả là:

P1M1D 

này tương đương với 31 ngày + 1 ngày = 32 ngày.

Đối Period này:

Period.between(LocalDate.of(2015, 8, 1), LocalDate.of(2015, 10, 2)) 

kết quả là:

P2M1D 

này tương đương với: 31 ngày (trong tháng) + 30 ngày (trong tháng) + 1 (vào tháng) = 62 ngày

Có phương pháp nào trong gói java.time sẽ cung cấp số ngày trong Period không? Tôi không thể tìm thấy. Không chắc chắn nếu tôi đã bỏ qua bất cứ điều gì hoặc nếu nó chỉ là đồng bằng không có.

+0

Thời gian có một phương pháp 'dài được (TemporalUnit unit) ', TemporalUnit có thể là ChronoUnit.DAYS – Cyrbil

+2

@cyrbil nhưng điều đó không làm những gì OP hỏi, hãy thử và xem. –

Trả lời

42

Từ documentation:

Để xác định một khoảng thời gian với giá trị ngày dựa trên (năm, tháng, ngày), sử dụng lớp Period. Lớp Period cung cấp các phương thức khác nhau, chẳng hạn như getMonths, getDaysgetYears .Để hiển thị số lượng> thời gian được đo trong một đơn vị thời gian, chẳng hạn như ngày, bạn có thể sử dụng phương pháp ChronoUnit.between.

LocalDate today = LocalDate.now(); 
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1); 

Period p = Period.between(birthday, today); 
long p2 = ChronoUnit.DAYS.between(birthday, today); 
System.out.println("You are " + p.getYears() + " years, " + p.getMonths() + 
        " months, and " + p.getDays() + 
        " days old. (" + p2 + " days total)"); 

Mã sản lượng sản xuất tương tự như sau:

You are 53 years, 4 months, and 29 days old. (19508 days total) 
+4

https://docs.oracle.com/javase/tutorial/datetime/iso/period.html –

+4

Tại sao họ không đặt phương thức đó trong 'Thời gian' tự? – Carcamano

+0

" số lượng> thời gian "sửa định dạng, vui lòng – Roland

6

Không có cách nào để làm những gì bạn yêu cầu. Lý do là không thể từ một số Period để suy ra số ngày thực tế của lịch trong kỳ. Một Period không được gắn với các ngày cụ thể, sau khi được xây dựng theo cách bạn hiển thị, nó sẽ mất dấu các ngày theo lịch thực tế.

Ví dụ: khoảng thời gian đầu tiên của bạn thể hiện khoảng thời gian 1 tháng và 1 ngày. Nhưng thời gian không quan tâm tháng nào. Nó chỉ đơn giản là một khái niệm "một tháng và một ngày".

Nếu bạn cần số ngày giữa hai ngày bạn nên sử dụng ChronoUnit.DAYS.between như Saket Mittal viết.

+0

Có , Tôi nhận ra điều đó. Tôi chỉ muốn biết cách khôi phục thông tin bị mất để tôi có thể tính toán số ngày. Cảm ơn. –

1

Có một đối tượng cụ thể tùy thuộc vào khoảng thời gian bạn muốn xử lý. Trang này here rất hữu ích giải thích tốt nhất cho kịch bản của bạn.

Phương pháp ChronoUnit.between rất hữu ích khi bạn muốn đo một khoảng thời gian trong một đơn vị duy nhất của thời gian mà thôi, chẳng hạn như ngày hoặc giây

LocalDate localDateStartDate = LocalDate.of(2016, 06, 10); 
LocalDate localDateEndDate = LocalDate.of(2016,06,23); 
long days = ChronoUnit.DAYS.between(localDateStartDate, localDateEndDate); 
Các vấn đề liên quan