比较日期的方法似乎根本不起作用

时间:2011-02-28 02:33:03

标签: java date

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;
                }

            }
        }
    }

基本上,上面经历了一系列“事件”。每个事件都有一个方法来检查它是否有更多的出现次数以及获取下一次出现的方法(类型为date)。

该方法接受日期并遍历数组并检查每个事件。对于每个事件,它会检查是否有更多事件。如果是,则检查该事件是否与指定的日期“相等”。如果是,则打印事件并跳出循环并移动到数组中的下一个事件。如果下一次出现不等于给定的日期,只要事件有更多的事件需要检查,它就会继续检查。

我知道这个方法是支持打印事件,但我没有错误,也没有输出。我一直在玩它一段时间无济于事。

我100%确定我的hasMoreOccurrences()和nextOccurrence()方法是否正常工作,因为依赖于它们的代码的其他部分非常有效。

我很难过:/ 谢谢你的帮助:)

修改 我已经打印了tmp和日期,我发现它们都出现在同一个DATE但不是同一个TIME。我不关心时间,只关心日期。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

有几种方法可以比较两个Date个实例而不考虑时间。

  1. 将两者都转换为日历并重置desinterest字段。

    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正在进行的原因)

  2. 没有时间格式化为String,然后再解析。

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    date = sdf.parse(sdf.format(date));
    

    然后比较它们。

    if (date1.equals(date2))
    
  3. 从头开始使用JodaTime

    if (dateTime1.toLocalDate().equals(dateTime2.toLocalDate()))
    

  4. 请注意,我使用x.equals(y)而不是x.compareTo(y) == 0,因为这就是你应该如何比较Java中相等的对象。