2011-02-02 11 views
6

मैं एक तारीख समय अंतर की गणना करने के कोशिश कर रहा हूँ, लेकिन मैं कुछ अजीब परिणाम हो रही है:जावा तारीख अंतर पहेली

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

    } 

} 

जब मैं सेट ccal को 1 31 2011 आज अंतर है: यहाँ स्रोत है 9 6 घंटे लेकिन जब मैं इसे 2 1 2011 पर सेट करता हूं तो दिनांक अंतर 48 घंटे होता है। यह कैसे हो सकता है? उपाय क्या है?

धन्यवाद,

इलियट

उत्तर

6

आप की तरह ccal स्थापित कर रहे हैं यदि हां "ccal.set(2011, 1, 31)" तिथि, वास्तव में 3 मार्च, 2001 के बाद से महीने शून्य आधारित होते हैं और कैलेंडर रोल डिफ़ॉल्ट रूप से। तो 48hrs (96-48) का अंतर सही है क्योंकि 1 मार्च (set(2011,2,1)) और 3 मार्च (set(2011,1,31)) के बीच दो दिन हैं।

+0

डिफ़ॉल्ट रूप से कैलेंडर रोलिंग पर जानकारी के लिए धन्यवाद। –

4

आप सही, जानते हैं कि महीनों 0 आधारित कर रहे हैं? तो 0 जनवरी और 1 का प्रतिनिधित्व करता है फरवरी का प्रतिनिधित्व करता है, ताकि 1 31 2011 मौजूद न हो। असल में यह संख्या बेहतर है कि महीनों के लिए कैलेंडर स्थिरांक का उपयोग करने के बजाय संख्याओं का उपयोग न करें, यानी कैलेंडर.जैनरी। खुद के लिए देखने के लिए क्या हो रहा है, आपके कैलेंडर के संबंधित तिथि प्रिंट आउट:

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

मुझे पता है कि यह परिणाम – Elliott

+3

परिणाम नहीं बताता है कि मुझे लगता है कि यह करता है। चूंकि 1 31 2011 मौजूद नहीं है, अप्रत्याशित चीजें होती हैं। दोबारा, जैसा कि मैंने अपने उत्तर के संपादन में उल्लेख किया है, उस तारीख को प्रिंट करें। –

+1

नहीं, अप्रत्याशित नहीं। पूरी तरह से अच्छी तरह से प्रलेखित। – dty

संबंधित मुद्दे