我看过其他关于日历对象在 Android/Java 上的工作方式的帖子,并且我知道它工作方式的基于 0 的性质。这个问题(对我来说)似乎有所不同,所以我发布了一个新问题。如果是骗子请见谅。
我在返回一个数组时遇到问题,该数组在一年前的每个月中都填充了月/年。例如,期望的结果是:
- 2013 年 7 月
- 2013年六月
- 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 个条目。所以:
- ...
- 2013年4月
- 2013 年 3 月
- 2013 年 3 月
- 2013 年 1 月
- 2012 年 12 月
- ...
我很困惑为什么会发生这种情况,因为如果我在monthsAgo
对象上放置手表,我可以看到月份值设置为 1,这是 2 月,因为Calendar
对象是基于 0 的数组,但是当我调用monthsAgo.get(Calendar.MONTH)
它时返回 2。否则数组的其余部分看起来很好,是预期的结果。
我可能在这里错过了一些简单的事情,我怀疑这与一月为 0 和二月为 1 有关,但我无法将其拼凑在一起。