2011-02-02 11 views
6

Bir tarih saat farkını hesaplamak çalışıyorum ama bazı garip sonuçlar alıyorum:java tarih farkı bulmaca

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

    } 

} 

Ben ayarladığınızda Ccal 1 31 2011 tarih farkıdır: İşte kaynağıdır 96 saat ama 2 1 2011 'a ayarladığımda tarih farkı 48 saat. Bu nasıl olabilir? Çaresi nedir?

sayesinde

Elliott

cevap

6

sizin gibi CCAL kuruyorsanız bu yüzden ay takvim rulo tabanlı sıfır olduğu ve o zamandan beri "ccal.set(2011, 1, 31)" tarih, aslında 3 Mart 2001 olduğu varsayılan olarak. Dolayısıyla, 1 Mart (set(2011,2,1)) ve 3 Mart (set(2011,1,31)) arasında iki gün olduğu için 48 saat (96-48) arasındaki fark doğrudur.

+0

Takvimdeki bilgiler için varsayılan olarak teşekkürler. –

4

Haklısınız, aylar esaslı 0 biliyoruz? Yani 0 Ocak'ı gösterir ve 1 Şubat'ı temsil eder, böylece 1 31 2011 mevcut değildir. Aslında sayıları hiç kullanmamak daha iyidir, bunun yerine aylar için Takvim sabitlerini kullanmak daha iyidir, örn .: Takvim.JANUARY. Kendiniz için görmek için neler senin Takvim'in ilgili tarihi yazdırmak:

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

Bunu biliyorum ama sonucu – Elliott

+3

açıkladığını düşünüyorum. 1 31 2011'den beri beklenmedik şeyler oluyor. Yine, cevabımın düzenlemesinde belirttiğim Tarih'i yazdırın. –

+1

Hayır, beklenmedik değil. Mükemmel bir şekilde belgelendi. – dty