2012-07-12 5 views
0
import java.util.GregorianCalendar; 

public class FullYear { 

    public static void main(String[] args) { 

     GregorianCalendar cal1 = new GregorianCalendar(2011,2,9); 
     GregorianCalendar cal2 = new GregorianCalendar(2011,2,12); 
     long ms1 = cal1.getTime().getTime(); 
     long ms2 = cal2.getTime().getTime(); 
     long difMs = ms2-ms1; 
     long msPerDay = 1000*60*60*24; 

     System.out.println(difMs); 
     System.out.println(msPerDay); 

     double days = difMs/msPerDay; 

     System.out.println(days); 

     GregorianCalendar cal11 = new GregorianCalendar(2011,2,9); 
     GregorianCalendar cal22 = new GregorianCalendar(2011,2,19); 
     long ms11 = cal11.getTime().getTime(); 
     long ms22 = cal22.getTime().getTime(); 
     long difMs1 = ms22-ms11; 
     long msPerDay1 = 1000*60*60*24; 

     System.out.println(difMs1); 
     System.out.println(msPerDay1); 

     double days2 = difMs1/msPerDay1; 

     System.out.println(days2); 

    } 

} 

Cette sorties 3.0 et 9.0 (je m'attends à 10 !!). Cela fait une division entière, donc 9.0 est en réalité 9.95. Cependant, ma question est ...Java Jours de calendrier entre deux dates de calendrier Inconsistance

  • La différence entre le 9 février et le 19 février est de 860400000 millisecondes, soit 239 heures.
  • La différence entre le 9 février et le 12 février est de 259200000 millisecondes, soit 72 heures.

La première différence ne devrait-elle pas être de 240 heures?

+0

Définissez les heures, minutes, secondes et millisecondes sur vos objets de calendrier (tous les 0), puis réévaluez la résiliation. –

+0

Je reçois 3.0 et 10.0 en cours d'exécution de votre code en utilisant Java 7u2 – s106mo

Répondre

5

Vous calculez les différences pour March, pas en février, et vous avez englouti le début de l'heure d'été.

+0

Droite et droite. Acceptez en une seconde. Je vais chercher un moyen de surmonter cela. – jn1kk

+0

Avez-vous essayé JodaTime? Je pense qu'il gère des choses comme ça (en comptant nativement en jours au lieu de millisecondes). –

+0

Je vais jeter un coup d'oeil, merci. – jn1kk