2011-02-02 20 views
6

Próbuję obliczyć różnicę czasu data ale Dostaję jakieś dziwne wyniki: Oto źródło:java różnica data puzzle

import java.util.Calendar; 
    import java.util.Collections; 
    import java.util.Vector; 

    public class Main { 

     static Calendar dcal = Calendar.getInstance(); 
    static Calendar ccal = Calendar.getInstance(); 
    public static void main(String[] args) { 
     dcal.set(2011, 1, 27); 
     ccal.set(2011,2,1); 
     long dtime = dcal.getTimeInMillis(); 
     long ctime = ccal.getTimeInMillis(); 
     long diff = ctime - dtime; 
     int hours = (int) (diff/(1000 * 60 * 60)); 
     System.out.println("hours->"+hours); 

    } 

} 

Kiedy ustawić CCAL do 1 31 2011 różnica jest data 96 godzin, ale kiedy ustawię to na 2 1 2011 różnica w czasie wynosi 48 godzin. Jak to może być? Co to jest lekarstwo?

Dzięki,

Elliott

Odpowiedz

6

Jeśli ustawienie CCAL jak tak „ccal.set(2011, 1, 31)” data jest rzeczywiście 03 marca 2001, od miesięcy są zerowe oparciu i rolki kalendarza domyślnie. Więc różnica 48 godzin (96-48) jest poprawna, ponieważ istnieją dwa dni od 1 marca (set(2011,2,1)) i 3 marca (set(2011,1,31)).

+0

Dzięki za informacje o toczeniu Kalendarza domyślnie. –

4

Wiesz, że miesiąc są oparte 0, prawda? Tak więc 0 oznacza styczeń, a 1 oznacza luty, więc 1 31 2011 nie istnieje. W rzeczywistości lepiej nie używać liczb, ale zamiast tego używać stałych kalendarza na miesiące, np .: Calendar.JANUARY. Aby zobaczyć na własne oczy, co się dzieje, wydrukować swój kalendarz w odpowiednim dniu:

ccal.set(2011, 1, 31); 
    System.out.println(ccal.getTime()); 
+0

Wiem, ale to nie wyjaśnia wyniku. – Elliott

+3

Myślę, że tak. Od 1 31 2011 nie istnieje, nieoczekiwane rzeczy się zdarzają. Ponownie wydrukuj datę tak, jak wspomniałem w edycji mojej odpowiedzi. –

+1

Nie, nie nieoczekiwany. Doskonale udokumentowane. – dty