2015-10-02 8 views
5

में java.util.Date गणना अंतर मैं दो तिथियों के बीच के अंतर की गणना करने की कोशिश की और मैं एक बात देखा। जब केवल गणना के दिन, दिन के उजाले की बचत समय की शुरुआत के अंतराल में शामिल है, तो परिणाम 1 दिन के साथ कम हो जाएगा।दिनों

सटीक परिणाम प्राप्त करने के लिए, घंटों के मूल्य पर भी विचार किया जाना चाहिए।

उदाहरण के लिए:

SimpleDateFormat format = new SimpleDateFormat("MM-dd-yyyy"); 
Date dfrom = format.parse("03-29-2015"); 
Date dto = format.parse("03-30-2015"); 
long diff = dto.getTime() - dfrom.getTime(); 
System.out.println(diff); 
System.out.println("Days: "+diff/(24 * 60 * 60 * 1000)); 
System.out.println("Hours: "+diff/(60 * 60 * 1000) % 24); 

आउटपुट:

82800000 
Days: 0 
Hours: 23 

किसी को भी एक बेहतर समाधान है?

+3

क्या आप इसके बजाय जावा.टाइम (जावा 8) या जोडा टाइम का उपयोग कर सकते हैं? दोनों इस एक * बहुत * सरल कर देगा। –

+3

संभावित जावा डुप्लिकेट [दो जावा दिनांक उदाहरणों के बीच अंतर की गणना] (http://stackoverflow.com/questions/1555262/calculating-the-difference-between-two-java-date-instances) – Tom

+2

मूल कारण आपकी धारणा है लाइन 6 हर दिन के 24 घंटे है, जब आप पहले से ही पता है कि अंतराल आप आकलन कर रहे हैं एक दिन यह है कि केवल 23 घंटे लंबा होता है में। –

उत्तर

9

अरे हाँ एक बेहतर समाधान है!

अप्रचलित java.util.Date वर्ग का उपयोग करने और java.time API जावा 8 में बनाया गया और बाद में (tutorial) की शक्ति को गले लगाने बंद करो। विशेष रूप से, DateTimeFormatter, LocalDate, और ChronoUnit कक्षाएं।

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-yyyy"); 
LocalDate date1 = LocalDate.parse("03-29-2015", formatter); 
LocalDate date2 = LocalDate.parse("03-30-2015", formatter); 
long days = ChronoUnit.DAYS.between(date1, date2); 
System.out.println(days); // prints 1 
संबंधित मुद्दे