date.getTime () проблема разницы - PullRequest
0 голосов
/ 20 декабря 2010

Привет,

У меня есть одно простое условие, которое никогда не проходит:

if(datas.date.getTime()-temps.date.getTime()>=5000)

Я хочу проверить, прошло ли 5 ​​секунд от одного к другому.


Обновление :

Вот установщик и получатель:

public class Data{
    Date date;
    public Date getDate() {
        return date;
    }
    public void setDate() {
        Date now = new Date();
        this.date = now;
    }
}

Итак, я звоню

Data data;
data.setDate();
processValues(data);

это значение процесса:

public void processValues(Data dat){

    if(datas.size()==7){
        writeValues(datas);
        datas=new Vector<Data>();
        temps=new Vector<Data>();
    }
    temps.add(dat);
    datas.add(dat);
}

это writeValues:

public void writeValues(Vector<Data> datas){
    for(i=0;i<temps.size();i++)
        for(j=0;j<datas.size();j++){
            if(temps.elementAt(i).epc==datas.elementAt(j).epc)
                if(datas.elementAt(j).date.getTime()-temps.elementAt(i).date.getTime()>=5000)
                    try {
                        dao.writeToDatabase(datas.elementAt(j));
                        i=j;
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
        }

}

Ответы [ 3 ]

0 голосов
/ 20 декабря 2010

Вы говорите, что у вас есть геттер, который выглядит так:

public Date getDate() {
    return date;
}

Date объекты являются изменяемыми, поэтому вам, вероятно, следует защищаться от копирования. Вы можете использовать clone() для этого.

Исходя из этого и симптомов вашей проблемы, возможно, ваши два Date объекта фактически являются одним и тем же объектом. Вы пытались использовать == (или !=), чтобы подтвердить, что они действительно являются отдельными объектами?

Обновление

На основании обновленной информации я понимаю, почему это условие никогда не проходит. Однако я не совсем понимаю, что вы хотите, чтобы ваш код делал. По сути, вы просто тестируете, можете ли вы создать 7 объектов менее чем за 5 секунд, а если нет, то вы записываете некоторые из них. В любом случае вы очищаете temps и datas, независимо от того, выписали объекты или нет. Я предполагаю, что вы не хотите очищать эти векторы элементов, которые не были выписаны. Я также не понимаю, почему у вас есть и datas, и temps, когда они содержат абсолютно одинаковые элементы.

0 голосов
/ 20 декабря 2010

Вы сказали, что ваш метод processValues ​​() выглядит следующим образом:

public void processValues(Data dat){
    if(datas.size()==7){
        writeValues(datas);
        datas=new Vector<Data>();
        temps=new Vector<Data>();
    }
    temps.add(dat);
    datas.add(dat);
}

Вы добавляете один и тот же экземпляр ("dat") к обоим векторам. Если вы обновите один, он обязательно обновит другой, поэтому в поле date разницы не будет.

0 голосов
/ 20 декабря 2010

Если вы выводите datas.date.getTime() и temps.date.getTime(), какая из них выше?Я предполагаю, что они поменялись местами, и вычитание дает отрицательное число, которое, конечно, никогда не будет больше 5000. Или точки данных не находятся на расстоянии 5 секунд.

...