TimeUnit.DAYS.convert(
Math.abs(
new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse("30-03-2020 00:00:00").getTime() -
new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse("1-03-2020 00:00:00").getTime()
),
TimeUnit.MILLISECONDS)
परिणाम 28 है, जबकि यह 29 होना चाहिए।
क्या समय क्षेत्र / स्थान समस्या हो सकती है?
java.time
[हालांकि मैं आपको जावा 7 पर ध्यान देता हूं], थ्रीटेनबप , जोडा)।
TimeUnit
DST के बारे में कुछ भी जानने का दिखावा नहीं करता है। जैसा कि जैवाडॉक कहता है: एक नैनोसेकंड को एक हजार माइक्रोसेकंड के एक हजारवें हिस्से के रूप में परिभाषित किया गया है, एक माइक्रोसेकंड एक हजार मिलीसेकंड के एक हजारवें हिस्से के रूप में, एक सेकंड के एक हजारवें हिस्से के रूप में एक मिलीसेकंड, साठ सेकंड के रूप में एक मिनट, साठ मिनट के रूप में एक घंटे और एक दिन के रूप में परिभाषित किया गया है। चौबीस घंटे । --- चूंकि DST वर्ष के 2 दिनों का कारण ठीक 24 घंटे नहीं है, TimeUnit
इसलिए यह गलत हो जाता है जब DST शामिल होता है।
SimpleDateFormat
, क्योंकि यह अप्रचलित है।java.time
इसके बजाय पैकेज का उपयोग करें । मेंSimpleDateFormat
के मामले, उपयोगDateTimeFormatter
। जावा 7 के मामले में, एंडी टर्नर की टिप्पणी नीचे देखें।