我只是想知道。可以合并两个日期的年,月和日,然后根据该组合进行比较。
例如:
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")
}
我想实现此方法只是为了比较哪个是最新日期。 这样做有什么问题吗?
答案 0 :(得分:0)
由于您使用的是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。