比较两个日期的字符串格式

时间:2018-12-28 16:03:54

标签: java date date-comparison

我正在尝试比较两个以整数表示的日期(例如10-05-2018)。这两天的格式相同,首选解决方案是不使用Date类型。我的想法是将日期向后写,并将它们比较为整数,这不能作为反例:10,09,2018和09,09,2018。还有其他想法吗?谢谢!

for (int i=0; i<date.length(); i++) {
    date3 = date.charAt(i) + datum1;
    date4 = date2.charAt(i) + date2;

}

if (datum3.compareTo(datum4)>0) {
    return 1;
}
if ((datum3.compareTo(datum4)<0)) {
    return -1;

}
    return 0;
}

2 个答案:

答案 0 :(得分:0)

我们使用yyyymmdd格式的整数

我们可以使用常规的int类型,可以进行排序,并且比Date占用更少的空间,可读性

但是缺少日期算术运算,这需要转换

还要考虑LocalDate ... Joda的较新java数据类型

答案 1 :(得分:0)

我假设您不想使用java.util.Date或它的替代内容java.time.LocalDate,可能是因为它是一项分配。

可以通过以下方式比较这些数字:将每个组成部分转换为int,然后从每年开始对每个组成部分使用Integer.compare

在伪代码中,这意味着:

For each component in [Year, Month, Day]:
  n = compare(date1[component], date2[component])
  if n != 0 then 
    return n
return 0 // all component are equals.

有多种方法可以将组件放入int数组中,Year = 0,Month = 1和Day = 2表示每个组件在该数组中的索引。

您可以将整个String转换为int[]数组。如果您知道格式,则使用Pattern(请参见注释)(例如Pattern.compile("^(?<DAY>\d+)-(?<MONTH>\d+-(?<YEAR>\d+)$"))可能是最容易验证String遵循某种设置格式的格式。它还允许您提取组件(使用matcher.group("DAY")等)。

String与数字进行比较可以通过两种方式完成:

  • 玩数字游戏。
  • 使用Integer.parseInt(String)

由于您可能应该验证组件的范围(每个月介于1到12之间,几天介于1到31之间(或取决于月份),...),所以转换为int最为简单。

注意:对于一项作业,如果不使用java.util.Date但允许使用Pattern,可能会适得其反。

相关问题