public void display(Date date) {
for (int i = 0; i < this.position; i++) {
schedule[i].init();
while (schedule[i].hasMoreOccurrences()) {
Date tmp = schedule[i].nextOccurrence();
if (tmp.compareTo(date) == 0) {
System.out.println(schedule[i].toString());
schedule[i].init();
break;
}
}
}
}
基本上,上面的代码经历了一系列“事件”。每个事件都有一个方法来检查它是否有更多的发生和一个方法来获取下一个事件(日期类型)。
该方法接受日期并遍历数组并检查每个事件。对于每个事件,它检查它是否有更多的发生。如果是,它会检查这次事件是否“等于”指定的日期。如果是,它会打印事件并跳出循环并移至数组中的下一个事件。如果下一次发生不等于给定的日期,它会一直检查,只要该事件有更多的发生要检查。
我知道这个方法应该打印出事件,但是我没有收到错误也没有输出。我已经尝试了一段时间但无济于事。
我 100% 确定我的 hasMoreOccurrences() 和 nextOccurrence() 方法正常工作,因为代码的其他部分严重依赖它们。
我很难过:/ 感谢您的帮助:)
编辑 我已经打印了 tmp 和 date,我看到它们都发生在相同的 DATE 但不是相同的 TIME。我不关心时间,只关心日期。有什么想法吗?
最佳答案
有几种方法可以在不考虑时间的情况下比较两个 Date
实例。
将两者都转换为日历并重置不感兴趣的字段。
Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0);
然后比较它们。
if (calendar1.equals(calendar2))
(真的,这太可怕了,这就是 JodaTime 存在并且 JSR-310 正在进行的原因)
不用时间格式化为字符串,然后解析回来。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); date = sdf.parse(sdf.format(date));
然后比较它们。
if (date1.equals(date2))
使用 JodaTime从头开始。
if (dateTime1.toLocalDate().equals(dateTime2.toLocalDate()))
请注意,我使用了 x.equals(y)
而不是 x.compareTo(y) == 0
因为这就是你应该如何比较对象是否相等在 Java 中。
关于java - 比较日期的方法似乎根本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5137706/