来自集合的Java7 GregorianCalendar timeInMillis效果不佳

时间:2013-10-20 13:59:50

标签: java arraylist

我需要记录保留的对象集合:日期和平均日温度。 我需要能够追溯日期。

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

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

dateSaved:2013-10-16 11:59:59 TimeStamp:1381960799018
dateSaved:2013-10-17 11:59:59 TimeStamp:1382047199018
dateSaved:2013-10-18 11:59:59 TimeStamp:1382133599018
dateSaved:2013-10-19 11:59:59 TimeStamp:1382219999018

这些TimeStamps都是独一无二的,似乎很好。

然而,当我进入for循环并希望从每个条目中获取时间戳时,我得到:

条目:0 //自第一个dateSaved未被粘贴以来被移除*
条目:1次InMillis:1382306399018
参赛作品:2次InMillis:1382306399018
参赛作品:3次InMillis:1382306399018
参赛作品:4 timesInMillis:1382306399018

这些都是同一时间,并且是:Sun,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);
    }

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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