मैं दो दिनांक सीमाओं के बीच अतिव्यापी दिनों की संख्या की गणना करना चाहता हूं। दिनांक सीमाओं के 2 जोड़े इस प्रारूप में कंसोल से पढ़े जाते हैं: yyyy-mm-dd; उदाहरण के लिए, यदि दो तिथियां हैं 2020-01-05 2020-03-31 तथा 2020-01-05 2020-03-20 प्रोग्राम को 2020-01-05 और 2020-03-20 के बीच के दिनों का पता लगाना चाहिए। हालांकि, यह काम नहीं करता। मैं पूछना चाहता हूं कि मैं इसे कैसे ठीक कर सकता हूं?

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;

    public class Dates {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String a  = sc.nextLine();
            String b = sc.nextLine();
            String c  = sc.nextLine();
            String d = sc.nextLine();
            LocalDate ldt1 = LocalDate.parse(a);
            LocalDate ldt2 = LocalDate.parse(b);
            LocalDate ldt3 = LocalDate.parse(c);
            LocalDate ldt4 = LocalDate.parse(d);
            System.out.println(ChronoUnit.DAYS.between(ldt1,ldt2,ldt3,ldt4));
        }

    }
0
Y.I 21 मार्च 2020, 10:25

1 उत्तर

सबसे बढ़िया उत्तर

यह उससे थोड़ा अधिक जटिल है (बुरी तरह से नहीं)।

    String i1StartStr = "2020-01-05";
    String i1EndStr = "2020-03-31";
    String i2StartStr = "2020-01-05";
    String i2EndStr = "2020-03-20";
    LocalDate i1Start = LocalDate.parse(i1StartStr);
    LocalDate i1End = LocalDate.parse(i1EndStr);
    LocalDate i2Start = LocalDate.parse(i2StartStr);
    LocalDate i2End = LocalDate.parse(i2EndStr);

    if (i1End.isBefore(i1Start) || i2End.isBefore(i2Start)) {
        System.out.println("Not proper intervals");
    } else {
        long numberOfOverlappingDates;
        if (i1End.isBefore(i2Start) || i2End.isBefore(i1Start)) {
            // no overlap
            numberOfOverlappingDates = 0;
        } else {
            LocalDate laterStart = Collections.max(Arrays.asList(i1Start, i2Start));
            LocalDate earlierEnd = Collections.min(Arrays.asList(i1End, i2End));
            numberOfOverlappingDates = ChronoUnit.DAYS.between(laterStart, earlierEnd);
        }
        System.out.println("" + numberOfOverlappingDates + " days of overlap");
    }

कोड से आउटपुट जैसा कि यह यहां खड़ा है:

ओवरलैप के 75 दिन

मैंने बेहतर परिवर्तनीय नामों का भी उपयोग किया है और उपयोगकर्ता द्वारा इनपुट किए गए अंतरालों का सत्यापन प्रस्तुत किया है।

मुझे पता है कि मुझे यहां कुछ स्पष्टीकरण जोड़ना था, लेकिन स्पष्ट रूप से, मुझे java.time का उपयोग करने वाला कोड अपने आप में पढ़ने के लिए इतना स्पष्ट लगता है, मुझे नहीं पता कि क्या समझाया जाना चाहिए। यदि आप प्रारंभ और समाप्ति दिनांक दोनों सहित दिनों की संख्या चाहते हैं, तो ChronoUnit.DAYS.between() से वापसी मान में 1 जोड़ना याद रखें। कृपया टिप्पणियों में अनुवर्ती कार्रवाई करें और मुझे बताएं कि आगे क्या स्पष्टीकरण उचित होगा।

1
Ole V.V. 21 मार्च 2020, 09:34