-1

我需要记录一组保持:日期和平均日温度的对象。我需要能够追溯日期。

所以我创建了一个保存这些值的类,并创建了一个保存这些对象的 ArrayList。

在我的代码中,我测试保持 5 天。当我运行程序并且 ArrayList 被填满时,一切似乎都很好,终端显示:

保存日期:2013-10-16 11:59:59 时间戳:1381960799018
保存日期:2013-10-17 11:59:59 时间戳:1382047199018
保存日期:2013-10-18 11:59:59 时间戳:138213013-18
保存日期: -19 11:59:59 时间戳:1382219999018

这些时间戳都是独一无二的,似乎很好。

但是,当我然后进入 for 循环并想从每个条目中获取时间戳时,我得到:

entry: 0 //自第一个 dateSaved 未粘贴后删除*
entry: 1 timeInMillis: 1382306399018
entry: 2 timeInMillis: 1382306399018
entry: 3 timeInMillis: 1382306399018
entry: 4 timeInMillis: 1382306399018

这些都是相同的时间,并且是:2013 年 10 月 20 日星期日 21:59:59 GMT

就是这里的日期。但不是时间。而且我并没有真正得到我期望得到的价值。

这里出了什么问题?

    GregorianCalendar date = new GregorianCalendar();
    GregorianCalendar beginDate = new GregorianCalendar();
    beginDate.roll(beginDate.DAY_OF_YEAR ,-5);


        while(beginDate.getTimeInMillis() < date.getTimeInMillis() )
    {
        GCalAndDouble dateAndTemp = new GCalAndDouble(beginDate, WeatherStation.Instance().getValue(Enums.MeasurementType.outsideTemperature, Enums.ValueType.average, beginDate) );

        list.add(dateAndTemp);

        System.out.println("dateSaved:" +  new SimpleDateFormat("YYYY-MM-dd KK:mm:ss").format(new Timestamp(beginDate.getTimeInMillis())) + " TimeStamp: " + beginDate.getTimeInMillis() );

        long timeTemp = beginDate.getTimeInMillis();
        beginDate.setTimeInMillis(timeTemp + 86400000); // + the ammount of milliseconds in a day.
    }

    for(int j = 0; j < 5; j++)
    {
        GCalAndDouble tempdateandtemp = list.get(j);

        long timestamptemp = tempdateandtemp.getDate().getTimeInMillis();

        System.out.println("entry: " + j + " timeInMillis: " + timestamptemp);
    }

谢谢你的帮助!

4

1 回答 1

0

您正在使用相同的beginDate对象。这意味着所有的值都是相同的。它们可能在您构建列表时发生了变化,但最终值就是您所看到的。

您很可能打算为每个条目创建一个新的 Date() 对象,以便为每个条目提供不同的日期。顺便说一句,我更喜欢使用long它不仅效率更高,而且没有这个问题。

于 2013-10-20T14:05:44.417 回答