1

我试图以秒为单位计算两个日历对象的差异。

第一个日历对象是当前调用时间,第二个日历对象是项目的创建时间戳。

现在我想知道“创建时间戳+几秒”是在当前调用时间日历对象 datetime 之后还是之前。

Calendar referenceCalendar = Calendar.getInstance();
Calendar compareCalendar = obj.getCreationDate();
compareCalendar.add(Calendar.SECOND, obj.getDuaration());
long differenceInSeconds = (compareCalendar.getTimeInMillis() - referenceCalendar.getTimeInMillis()) / 1000;

if (differenceInSeconds == 0) {
    iter.remove();
} else if (differenceInSeconds > 0) {
    iter.remove();
}

但结果总是“差异> 0”。任何想法我做错了什么?

任何帮助将不胜感激。

编辑

我发现日历对象“obj.getCreationDate()”会不断更新它们的日期时间。

方法其实很简单:

public void setCreationDate(Calendar date)
            throws InvalidParameterException {
        if (date == null) {
            throw new InvalidParameterException(
                    "Creation date can not be null.");
        } else {
            this.creationDate = date;
        }
    }

并且该方法只会被调用 1 次:

setCreationDate(Calendar.getInstance);

Calendar.getInstance 会强制我保存的 var 更新其日期时间吗?在我看来,这种情况发生了。

-> 我真的很确定我的方法真的只被调用一次

4

2 回答 2

2

日历是可比较的,不要得到毫秒和比较,使用compareCalendar.compareTo(referenceCalendar)

在你的情况下:

Calendar referenceCalendar = Calendar.getInstance();
Calendar compareCalendar = obj.getCreationDate();
compareCalendar.add(Calendar.SECOND, obj.getDuaration());

if (compareCalendar.compareTo(referenceCalendar) >= 0) {
    // ccompareCalendar is equals or greater referenceCalendar
}
于 2012-12-22T20:45:42.207 回答
0

发现问题:

它的以下行:

compareCalendar.add(Calendar.SECOND, obj.getDuaration());

如果您将一些字段添加到现有日历对象,则基础对象将被当前日期时间对象 + 您添加的字段覆盖。

我不知道这是设计使然还是只是一个错误。

所以你可以简单地克隆你的对象并使用它而不是 obj.getCreationTime()

日历 clonedCalendar = (日历) obj.getCreationDate().clone();

于 2012-12-22T21:51:26.010 回答