2010-09-26 8 views
26

Possible en double:
how to calculate difference between two dates using javaobtenir la différence entre la date dans les jours à Java

J'essaie quelque chose comme ça, où je suis en train d'obtenir la date de 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()); 

Je ne suis pas en mesure de soustraire la fin et la date de début Comment puis-je obtenir la différence entre la date de début et la date de fin?

+0

comment vous n'êtes pas en mesure? Exception? Mauvaise date? – Bozho

+0

J'essaie de faire ce programme dans netbeans n j'ai essayé de soustraire d end.getTime-start.getTime() n j'ai été informé qu'il était possible d'utiliser - operator entre les deux obj Date. –

+0

Pourquoi je ne peux pas ajouter ma réponse? Je n'ai pas de question comme celle-ci, j'ai une autre solution pour cette question. – UR6LAD

Répondre

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

Cela ne fonctionnera pas lors du passage de l'heure d'été (ou sauter secondes) comme orange80 a souligné et pourrait aussi bien ne pas donner les résultats escomptés lorsque en utilisant différents moments de la journée. Utilisation JodaTime pourrait être plus facile pour des résultats corrects, que la seule façon correcte avec Java clair que je sais est d'utiliser l'ajout de calendrier et avant/après des méthodes pour vérifier et ajuster le calcul:

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

merci d'aider! –

+1

pouvez-vous s'il vous plaît m'expliquer sur ce morceau de code: 1000 * 60 * 60 * 24 –

+1

Date.getTime renvoie le temps depuis 1970 en millisecondes, de sorte que la différence est également en millisecondes. 1000 millisecondes font 1 seconde, 60 secondes font 1 minute, 60 minutes font 1 heure et 24 heures font 1 jour. Bien sûr, vous pourriez simplement diviser diffTime par 86400000, mais alors vous ne verriez pas aussi clairement (ok, évidemment pas encore assez clair;)), ce que ce nombre est. – hd42

14

Comme 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 est un article sur l'arithmétique date Java.

23

Utilisez JodaTime pour cela. C'est beaucoup mieux que le standard Java DateTime Apis. Voici le code JodaTime pour calculer la différence en jours:

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

Merci pour la réponse mr. Faisal mais je dois utiliser seulement les fonctions intégrées et les –

Questions connexes