我需要记录保留的对象集合:日期和平均日温度。 我需要能够追溯日期。
所以我创建了一个保存这些值的类,并创建了一个保存这些对象的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);
}
感谢您的帮助!
答案 0 :(得分:0)
您正在使用相同的beginDate
对象。这意味着所有值都是相同的。在构建列表时,它们可能已经发生了变化,但最后的值就是您将看到的全部内容。
您很可能打算为每个条目创建一个新的Date()对象,以便为每个条目指定不同的Date。顺便说一下,我更喜欢使用long
,这不仅效率更高,而且没有这个问题。