2010-09-26 40 views
26

thể trùng lặp:
how to calculate difference between two dates using javanhận được sự khác biệt giữa ngày trong những ngày trong java

Tôi đang cố gắng một cái gì đó như thế này, nơi tôi đang cố gắng để có được ngày từ comboboxes

Calendar start = Calendar.getInstance(); 
Calendar end = Calendar.getInstance(); 

int Sdate=Integer.parseInt(cmbSdate.getSelectedItem().toString()); 
int Smonth=cmbSmonth.getSelectedIndex(); 
int Syear=Integer.parseInt(cmbSyear.getSelectedItem().toString()); 

int Edate=Integer.parseInt(cmbEdate.getSelectedItem().toString()); 
int Emonth=cmbEmonth.getSelectedIndex(); 
int Eyear=Integer.parseInt(cmbEyear.getSelectedItem().toString()); 

start.set(Syear,Smonth,Sdate); 
end.set(Eyear,Emonth,Edate); 

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
String startdate=dateFormat.format(start.getTime()); 
String enddate=dateFormat.format(end.getTime()); 

Tôi không thể trừ ngày kết thúc và ngày bắt đầu Làm thế nào để tôi nhận được sự khác biệt giữa ngày bắt đầu và ngày kết thúc ??

+0

cách bạn không thể? Ngoại lệ? Nhầm cuộc hẹn? – Bozho

+0

Tôi đang cố gắng thực hiện chương trình này trong netbeans n tôi đã cố gắng trừ d end.getTime-start.getTime() n Tôi đã được thông báo rằng nó có thể sử dụng - toán tử giữa hai obj Date. –

+0

Tại sao tôi không thể thêm câu trả lời của mình? Tôi không có câu hỏi như thế này, tôi có một giải pháp khác cho câu hỏi này. – UR6LAD

Trả lời

40
Calendar start = Calendar.getInstance(); 
Calendar end = Calendar.getInstance(); 
start.set(2010, 7, 23); 
end.set(2010, 8, 26); 
Date startDate = start.getTime(); 
Date endDate = end.getTime(); 
long startTime = startDate.getTime(); 
long endTime = endDate.getTime(); 
long diffTime = endTime - startTime; 
long diffDays = diffTime/(1000 * 60 * 60 * 24); 
DateFormat dateFormat = DateFormat.getDateInstance(); 
System.out.println("The difference between "+ 
    dateFormat.format(startDate)+" and "+ 
    dateFormat.format(endDate)+" is "+ 
    diffDays+" days."); 

này sẽ không hoạt động khi vượt qua thời gian tiết kiệm ánh sáng ban ngày (hoặc nhảy giây) như orange80 chỉ ra và có thể cũng không cho kết quả mong đợi khi sử dụng thời gian khác nhau trong ngày. Sử dụng JodaTime có thể dễ dàng hơn cho kết quả chính xác, như cách chính xác chỉ với Java đơn giản tôi biết là sử dụng tiện ích Lịch và trước/sau phương pháp để kiểm tra và điều chỉnh tính:

start.add(Calendar.DAY_OF_MONTH, (int)diffDays); 
while (start.before(end)) { 
    start.add(Calendar.DAY_OF_MONTH, 1); 
    diffDays++; 
} 
while (start.after(end)) { 
    start.add(Calendar.DAY_OF_MONTH, -1); 
    diffDays--; 
} 
+0

cảm ơn vì đã giúp đỡ! –

+1

bạn có thể vui lòng giải thích cho tôi về đoạn mã này: 1000 * 60 * 60 * 24 –

+1

Date.getTime trả về thời gian từ năm 1970 theo mili giây, vì vậy sự khác biệt cũng bằng mili giây. 1000 mili giây làm cho 1 giây, 60 giây làm cho 1 phút, 60 phút làm cho 1 giờ và 24 giờ làm cho 1 ngày. Tất nhiên bạn chỉ có thể chia diffTime bởi 86400000, nhưng sau đó bạn sẽ không nhìn thấy rõ ràng (ok, rõ ràng vẫn chưa rõ ràng enought;)), số đó là gì. – hd42

14

Giống như this.

import java.util.Date; 
import java.util.GregorianCalendar; 

/** 
* DateDiff -- compute the difference between two dates. 
*/ 
public class DateDiff { 
    public static void main(String[] av) { 
    /** The date at the end of the last century */ 
    Date d1 = new GregorianCalendar(2000, 11, 31, 23, 59).getTime(); 

    /** Today's date */ 
    Date today = new Date(); 

    // Get msec from each, and subtract. 
    long diff = today.getTime() - d1.getTime(); 

    System.out.println("The 21st century (up to " + today + ") is " 
     + (diff/(1000 * 60 * 60 * 24)) + " days old."); 
    } 

}

Here là một bài viết về Java ngày số học.

23

Sử dụng JodaTime cho việc này. Nó tốt hơn nhiều so với chuẩn Java DateTime Apis. Đây là mã trong JodaTime để tính chênh lệch trong ngày:

private static void dateDiff() { 

    System.out.println("Calculate difference between two dates"); 
    System.out.println("================================================================="); 

    DateTime startDate = new DateTime(2000, 1, 19, 0, 0, 0, 0); 
    DateTime endDate = new DateTime(); 

    Days d = Days.daysBetween(startDate, endDate); 
    int days = d.getDays(); 

    System.out.println(" Difference between " + endDate); 
    System.out.println(" and " + startDate + " is " + days + " days."); 

    } 
+2

Thanx cho câu trả lời mr. Faisal nhưng tôi chỉ cần sử dụng các hàm dựng sẵn và apis –

Các vấn đề liên quan