2010-09-26 11 views
26

Powiel możliwe:
how to calculate difference between two dates using javacoraz różnicę między datą w dni w java

Próbuję coś takiego, gdzie Próbuję uzyskać datę z 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()); 

nie jestem w stanie odjąć końca i datę rozpoczęcia Jak uzyskać różnicę między datą początkową a końcową?

+0

jak nie jesteś w stanie? Wyjątek? Zła data? – Bozho

+0

Próbuję zrobić ten program w netbeans n Próbowałem odjąć d end.getTime-start.getTime() n Powiadomiono mnie, że możliwe było użycie operatora - między dwoma obiektami Date obj. –

+0

Dlaczego nie mogę dodać odpowiedzi? Nie mam takiego pytania, mam inne rozwiązanie tego pytania. – UR6LAD

Odpowiedz

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."); 

To nie zadziała przy przekraczaniu czasu letniego (lub skok sekund) jako orange80 podkreślić, i może dobrze nie jak dać oczekiwanych rezultatów, gdy używając różnych porach dnia. Korzystanie JodaTime może być łatwiejsze do poprawnych wyników, jako jedyny prawidłowy sposób ze zwykłego Java wiem jest użycie Dodaj kalendarz i przed/po metody, aby sprawdzić i wyregulować obliczenie:

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

dzięki za pomoc! –

+1

czy możesz mi wyjaśnić ten fragment kodu: 1000 * 60 * 60 * 24 –

+1

Date.getTime zwraca czas od 1970 w milisekundach, więc różnica jest również w milisekundach. 1000 milisekund to 1 sekunda, 60 sekund 1 minuta, 60 minut 1 godzina i 24 godziny 1 dzień. Oczywiście mógłbyś po prostu podzielić diffTime przez 86400000, ale wtedy nie zobaczyłbyś tak wyraźnie (ok, oczywiście nadal nie jest to oczywiste;)), jaka jest ta liczba. – hd42

14

Podobnie jak 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 jest artykuł na Java data arytmetyki.

23

Użyj do tego celu JodaTime. Jest znacznie lepszy niż standardowy Java DateTime Apis. Oto kod w JodaTime do obliczenia różnicy w dniach:

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

Niż za odpowiedź mr. Faisal, ale muszę używać tylko wbudowanych funkcji i apis –

Powiązane problemy