2012-10-23 111 views
19

Duplicate có thể:
Calculating the Difference Between Two Java Date InstancesTrừ hai ngày trong Java

Tôi biết điều này có thể là một chủ đề trùng lặp. Nhưng tôi đang cố gắng tìm ra cách để tính toán sự khác biệt giữa hai ngày. Từ jquery chuỗi ngày có định dạng 'yyyy-mm-dd'. Tôi đọc đây là một Chuỗi và được chuyển đổi thành java Ngày như thế này

Date d1 = new SimpleDateFormat("yyyy-M-dd").parse((String) request.getParameter(date1)); 
Date d2 = new SimpleDateFormat("yyyy-M-dd").parse((String) request.getParameter(date2)); 

Tôi muốn tính toán sự khác biệt về số ngày giữa hai ngày này.

Lưu ý: Tôi không thể sử dụng API của bên thứ ba như những nhu cầu cần xem xét.

+0

bạn chắc chắn là mm thay vì MM? – Jimmy

+0

Sự khác biệt nào? Tùy thuộc vào địa phương, vv có nhiều định nghĩa. Hãy xem các API thời gian của bên thứ ba khác nhau để xem tôi đang đi đâu với nhận xét này. –

+1

Nếu bạn cho rằng đó là sự lừa đảo, tại sao bạn không tìm kiếm? Nó không giống như các chủ đề khác không thể được tìm thấy ... –

Trả lời

18
long diff = Math.abs(d1.getTime() - d2.getTime()); 
long diffDays = diff/(24 * 60 * 60 * 1000); 
+3

Điều này sẽ thất bại trong suốt ranh giới tiết kiệm ánh sáng ban ngày của mùa xuân. Ví dụ (sử dụng mã của bạn), 'd1 = ngày mới (112, 3-1, 11, 0, 0, 0)', 'd2 = ngày mới (112, 3-1, 12, 0, 0, 0)' , kết quả bằng '0'. –

+1

Câu trả lời cung cấp kết quả cắt ngắn. Đối với một kết quả được làm tròn: dài diffDays = (diff + 12 * 60 * 60 * 1000)/(24 * 60 * 60 * 1000) –

+0

@SteveKuo, tôi biết điều này đã được một thời gian trước đây, nhưng bạn có một giải pháp tốt hơn mà không không thể tiết kiệm ánh sáng ban ngày? Tôi không cố gắng để được snarky, tôi đang làm việc trên một vấn đề tương tự bản thân mình và muốn tránh mã với sai sót rõ ràng. –

-2

Giả sử rằng bạn đang hạn chế việc sử dụng Date, bạn có thể làm như sau:

Date diff = new Date(d2.getTime() - d1.getTime());

Tại đây bạn sẽ tính toán sự khác biệt trong mili giây kể từ khi "kỷ nguyên", và tạo ra một đối tượng ngày mới tại một bù đắp từ kỷ nguyên. Giống như những người khác đã nói: câu trả lời trong câu hỏi trùng lặp có lẽ là lựa chọn thay thế tốt hơn (nếu bạn không bị ràng buộc xuống Date).

+0

ngày đã được yêu cầu –

+0

Vui lòng đọc lại câu hỏi một cách cẩn thận. Câu trả lời của bạn không ** không ** trả lời câu hỏi gốc. – DavidPostill

-1
Date d1 = new SimpleDateFormat("yyyy-M-dd").parse((String) request. 
      getParameter(date1)); 
Date d2 = new SimpleDateFormat("yyyy-M-dd").parse((String) request. 
      getParameter(date2)); 

long diff = d2.getTime() - d1.getTime(); 

System.out.println("Difference between " + d1 + " and "+ d2+" is " 
     + (diff/(1000 * 60 * 60 * 24)) + " days."); 
+1

Sẽ không thành công khi bắt đầu ranh giới tiết kiệm ánh sáng ban ngày. Ví dụ, d1 = '2012-3-11' và d2 =' 2012-3-12' kết quả sau 0 ngày. –