Java 比较日历对象以获得秒数差异
我试图得到两个日历对象的秒差 第一个日历对象是当前调用时间,第二个日历对象是项目的创建时间戳 现在我想知道“创建时间戳+几秒钟”是在当前调用时间日历对象datetime之后还是之前Java 比较日历对象以获得秒数差异,java,datetime,Java,Datetime,我试图得到两个日历对象的秒差 第一个日历对象是当前调用时间,第二个日历对象是项目的创建时间戳 现在我想知道“创建时间戳+几秒钟”是在当前调用时间日历对象datetime之后还是之前 Calendar referenceCalendar = Calendar.getInstance(); Calendar compareCalendar = obj.getCreationDate(); compareCalendar.add(Calendar.SECOND, obj.getDuaration())
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()”将持续更新其日期时间
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();
}
方法非常简单:
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会强制我保存的变量更新其日期时间吗?
在我看来,这种情况发生了
->我确信我的方法只会被调用一次日历是可比较的,不要获取毫秒并进行比较,使用
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
}
发现的问题:
这是一行:
compareCalendar.add(Calendar.SECOND,obj.getDuaration())
如果向现有日历对象添加某些字段,则基础对象将被当前日期时间对象+添加的字段覆盖
我不知道这是出于设计还是只是一个bug
因此,您可以简单地克隆对象并使用它,而不是obj.getCreationTime()
Calendar clonedCalendar=(Calendar)obj.getCreationDate().clone()
您必须使用java.util.*吗?Joda Time对于这类事情来说是一个更好的API。不,它只是我的第一选择。它必须运行安卓4.0+谢谢你的回复。我想我的问题是我的compareCalendar更新到了datetime。但我不知道为什么-