我正试图获得两个日历对象的秒数差异。
第一个日历对象是当前的调用时间,第二个日历对象是项目的创建时间戳。
现在我想知道'创建时间戳+几秒'是否在当前调用时间日历对象日期时间之前或之前。
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更新日期时间吗? 在我看来,这种情况发生了。
- >我确信我的方法真的只被调用一次
答案 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();