Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较日历对象以获得秒数差异_Java_Datetime - Fatal编程技术网

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

Java 比较日历对象以获得秒数差异,java,datetime,Java,Datetime,我试图得到两个日历对象的秒差 第一个日历对象是当前调用时间,第二个日历对象是项目的创建时间戳 现在我想知道“创建时间戳+几秒钟”是在当前调用时间日历对象datetime之后还是之前 Calendar referenceCalendar = Calendar.getInstance(); Calendar compareCalendar = obj.getCreationDate(); compareCalendar.add(Calendar.SECOND, obj.getDuaration())

我试图得到两个日历对象的秒差

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

现在我想知道“创建时间戳+几秒钟”是在当前调用时间日历对象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()”将持续更新其日期时间

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。但我不知道为什么-