2015-11-17 13 views
11

मैं सेकंड में अलग-अलग वर्षों के साथ 2 तिथियों के बीच अंतर की गणना करना चाहता हूं। मैं इसे इस तरह कार्य करें:विभिन्न वर्षों के साथ दो तिथियों के बीच अंतर

d1 = Tue Nov 17 14:18:20 GMT+01:00 2015 
d2 = Fri Nov 28 15:37:50 GMT+02:00 2016 

मैं एक परिणाम के रूप -169191300 मिलती है:

public static int dateDifference(Date d1, Date d2){ 
    return (int) (d2.getTime() - d1.getTime()); 
} 

समस्या यह है कि जब मैं इन तिथियों के लिए उदाहरण के लिए इस चलाया जाता है।

लेकिन जब साल ही कर रहे हैं मैं सही परिणाम प्राप्त, 954959013

कोई बता सकता है कि यहां क्या हो रहा है?

+0

मैं किसी भी समय से संबंधित संचालन के लिए जावा 8 में [जोडा-टाइम] (http://www.joda.org/joda-time/) या 'java.time' को देखने की सलाह देता हूं। – Reactormonk

उत्तर

15

उपयोग एक long के बजाय एक int

public static long dateDifference(Date d1, Date d2){ 
    return (d2.getTime() - d1.getTime()); 
} 

getTime() एक long रिटर्न क्योंकि परिणाम एक पूर्णांक से अधिक हो सकता है। जब आप एक पूर्णांक में Integer.MAX_VALUE से अधिक लंबे समय तक कास्ट करते हैं तो आपको overflow मिलता है और मान नकारात्मक हो सकता है।

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