Android问题 - Calendar.get()返回错误的值

时间:2013-07-29 21:46:29

标签: android

我见过有关Calendar对象在Android / Java上的工作方式的其他帖子,我知道它的工作方式基于0的性质。这个问题似乎(对我而言)不同,所以我发布了一个新问题。请原谅我,如果这是一个骗局。

我遇到了一个返回数组的问题,我已经填充了每月的月份/年,直至1年前。例如,期望的结果是:

  • 2013年7月
  • 2013年6月
  • 2013年5月
  • ...
  • 2012年8月

PastMonth是一个简单的对象,由两个整数组成,月/年和字符串表示 - “2013年7月”。

Calendar rightNow = Calendar.getInstance();

PastMonth[] dateList = new PastMonth[12];
dateList[0] = new PastMonth(rightNow.get(Calendar.MONTH), rightNow.get(Calendar.YEAR));
for (int i=1; i<=11; i++) {
    Calendar monthsAgo = Calendar.getInstance();
    int month = monthsAgo.get(Calendar.MONTH);
    monthsAgo.set(Calendar.MONTH, month - i);
    dateList[i] = new PastMonth(monthsAgo.get(Calendar.MONTH), monthsAgo.get(Calendar.YEAR));
}

除了2月份之外,这一切都很好。我最终得到了1月,然后是3月份的2个参赛作品。所以:

  • ...
  • 2013年4月
  • 2013年3月
  • 2013年3月
  • 2013年1月
  • 2012年12月
  • ...

我很困惑为什么会发生这种情况,因为如果我在monthsAgo对象上放置一个监视器,我可以看到月份值设置为1,即2月归因于Calendar对象是基于0的数组,但是当我调用monthsAgo.get(Calendar.MONTH)时它返回2.否则数组的其余部分看起来很好并且是期望的结果。

我可能在这里错过了一些简单的东西,我怀疑它与1月0和2月是1有关,但我不能把它拼凑起来。

1 个答案:

答案 0 :(得分:2)

而不是monthsAgo.set(Calendar.MONTH, month - i);,请尝试monthsAgo.add(Calendar.MONTH, -i);。问题在于(如果你现在正在执行它),一旦一切都正常化,你将在2013年2月29日(内部)结束,这将成为3月1日。您需要查看日历及其setaddroll方法的文档,但在这种情况下,我认为add就是您想要的。