比较日历对象以获得秒数差异

时间:2012-12-22 20:40:02

标签: java 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;
        }
    }

该方法只会被调用一次:

  

setCreationDate(Calendar.getInstance);

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

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

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

发现问题:

以下一行:

  

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

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

我不知道这是设计还是错误。

所以你可以简单地克隆你的对象并使用它来代替obj.getCreationTime()

  

Calendar clonedCalendar =(Calendar)obj.getCreationDate()。clone();