我正在尝试比较两个以整数表示的日期(例如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;
}
答案 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
,可能会适得其反。