1

Android/Java で Calendar オブジェクトが機能する方法に関する他の投稿を見たことがありますが、その機能の 0 ベースの性質を認識しています。この問題は (私には) 違うように思われるので、新しい質問を投稿しました。デマだったら許して。

1 年前までの毎月の月/年を入力した配列を返す際に問題が発生しています。たとえば、望ましい結果は次のとおりです。

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

PastMonthは、2 つの整数、月/年、および文字列表現 ("July 2013") で構成される単純なオブジェクトです。

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に設定されていることがわかります。Calendarオブジェクトが0ベースの配列であるため、これは2月ですが、呼び出すmonthsAgo.get(Calendar.MONTH)と2が返されます。配列の残りの部分は正常に見え、望ましい結果です。

ここで単純なことを見逃している可能性があります.1月が0で2月が1であることに関係していると思われますが、つなぎ合わせることができません.

4

1 に答える 1