通过合并比较日期

时间:2019-03-19 04:02:32

标签: date comparison

我只是想知道。可以合并两个日期的年,月和日,然后根据该组合进行比较。

例如:
    Date A: 12th-January-2019
    Date B: 24th-December-2018

基于上述日期,我可以将年,月和日组合如下:

    Date A: 20190112
    Date B: 20181224

因此,根据数字,我可以执行以下逻辑,比较哪个日期先出现:

if(Date A > Date B) {
    output("Date A is the latest")
}

我想实现此方法只是为了比较哪个是最新日期。 这样做有什么问题吗?

1 个答案:

答案 0 :(得分:0)

java.time

由于您使用的是Java,因此建议您充分利用现代Java日期和时间API java.time。

    String[] dateStringsFromDatabase = {
                "2018/12/19",
                "2017-02-01",
                "2018.03.04",
                "25-12-2016", // reversed
                "2019\\09\\12",
                "2014:03:01"
            };

    List<LocalDate> parsedDates = new ArrayList<>(dateStringsFromDatabase.length);
    for (String dateString : dateStringsFromDatabase) {
        // No matter which delimiter is used, replace it with a hyphen
        String text = dateString.replaceAll("\\W", "-");
        try {
            parsedDates.add(LocalDate.parse(text));
        } catch (DateTimeParseException dtpe) {
            System.out.println(dateString + " not parsed: " + dtpe.getMessage());
        }
    }

输出:

25-12-2016 not parsed: Text '25-12-2016' could not be parsed at index 0

这种方法为您提供的是对日期进行验证,即使它们带有所有不同的定界符也是如此。尤其是在这种情况下,我相信您应该验证字符串是否在预期的变化范围内。否则,您可能会冒个风险,例如,将数字颠倒的日期以2512年作为日期。您想在发生之前赶上它。

首先进行比较的示例:

    for (int i = 1; i < parsedDates.size(); i++) {
        LocalDate dateA = parsedDates.get(i - 1);
        LocalDate dateB = parsedDates.get(i);
        if (dateA.isAfter(dateB)) {
            System.out.format("%s is later than %s%n", dateA, dateB);
        }
    }

输出:

2018-12-19 is later than 2017-02-01
2019-09-12 is later than 2014-03-01

链接: Oracle tutorial: Date Time解释了如何使用java.time。