2014-07-08 5 views
0

Je suis nouveau à Java et j'essaie de faire quelques exercices pratiques pour mieux le comprendre.Calculer des jours entre deux dates en Java

Je me suis fixé l'exercice d'entrer différentes chaînes, entiers, etc à travers la console et écrire l'entrée dans un fichier texte. Tout cela fonctionne bien.

Maintenant, je veux entrer dans le fichier texte lorsque le projet a commencé et quand il se terminera. Cela fonctionne sans problème.

Maintenant, voici mon problème. Je veux calculer le temps que dure le projet du début à la fin en quelques jours.

Actuellement, il calcule uniquement les jours, en ignorant le mois et l'année.

For example: (dd.mm.yyyy) 
Start: 07.07.2014 End: 15.07.2014 Output: 8 (almost correct :)) 
Another example: 
Start 07.07.2014 End: 03.08.2014 Output: -3 (not even close) 

Je n'arrive pas à comprendre où est mon problème.

Merci pour votre aide! Chris

System.out.print("Start project (dd.mm.yyyy): "); 
String beginn = input.nextLine(); 
DateFormat df = new SimpleDateFormat("dd.mm.yyyy"); 
Date d = null; 
try { 
    d = df.parse(beginn); 
} catch (ParseException e) { 
    System.out.println("Unable to parse " + beginn); 
} 
DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG); 
String s3 = df3.format(d); 

System.out.print("End of project (dd.mm.yyyy): "); 
String ende = input.nextLine(); 
DateFormat df4 = new SimpleDateFormat("dd.mm.yyyy"); 
Date g = null; 
try { 
    d = df.parse(ende); 
} catch (ParseException f) { 
    System.out.println("Unable to parse " + ende); 
} 
//DateFormat df5 = DateFormat.getDateInstance(DateFormat.LONG); 
//String s4 = df5.format(d); 


// String dauer = input.nextLine(); 
diffDays = 0; 
try { 
    DateFormat dfa = new SimpleDateFormat("dd.mm.yyyy"); 
    Date from = dfa.parse(beginn); 
    Date to = dfa.parse(ende); 
    long diffMillis = to.getTime() - from.getTime(); 
    //diffDays = Math.round((double)diffMillis/(24. * 60.*60.*1000.)); 
    diffDays = diffMillis/(1000 * 60 * 60 * 24); 
    System.out.println(diffDays); 
} catch (ParseException ex) { 
    ex.printStackTrace(); 
} 
+0

Voici une belle bibliothèque pour effectuer des opérations de dates: [Joda-Time] (http: //www.joda.org/joda-time/). Et voici un exemple: http://stackoverflow.com/a/15541322/2806497 – OlivierH

+0

duplication possible de [Calcul de la différence entre deux instances de date Java] (http://stackoverflow.com/questions/1555262/calculating-the- difference-between-two-java-date-instances) – Jens

+0

La division par '1000 * 60 * 60 * 24' vous donnera une mauvaise réponse pour les plages de dates qui couvrent le début de l'heure d'été. Ne supposez pas que chaque jour a 24 heures. –

Répondre

0

Votre format est erroné.

DateFormat df = new SimpleDateFormat("dd.MM.yyyy"); 

Selon le documentation, le MM indique les mois où mm spécifie minutes.

+0

Fonctionne! Incroyable comment ces petites erreurs me frustrent pendant plus de deux heures. Merci beaucoup pour votre aide! – user3013909

0

Exemple Java 8:
Obtenez le nombre de jours entre aujourd'hui et java.sql.Date:

LocalDate startDate = LocalDate.now(); 
Instant instant = dueDate.toInstant(); 
LocalDate endDate = instant.atZone(ZoneId.systemDefault()).toLocalDate(); 
long dueDays = ChronoUnit.DAYS.between(startDate, endDate); 
System.out.println("XXX is due in " + dueDays); 
Questions connexes