我选择开始日期(例如31/01/2014)和结束日期(例如31/12/2014),我每个月都会插入一条记录。如果下个月是2月28日,那么我总是在28、3月,4月等得到28。
我该如何解决?我希望我能解释

SimpleDateFormat sdf1 = new SimpleDateFormat( "yyyy-MM-dd" );
ContentValues cv = new ContentValues();

for(
  int i=0;
  calendar1.getTime().before(calendar2.getTime());
  i++
) {
  calendar1.add(Calendar.MONTH, 1);

  if (calendar1.getTime().before(calendar2.getTime())) {
    String strDate = sdf1.format(calendar1.getTime());
    cv.put(etableTable.DATE, strDate);
    db.insert(etableTable.TABLE_NAME, null, cv);
    ...
  }
}

最佳答案

假设您说的是类GregorianCalendar-而不是calendar1.add(Calendar.MONTH, 1),请尝试也调用以下方法作为替代方法:

static GregorianCalendar moveToEndOfMonth(GregorianCalendar gcal) {
  gcal.add(Calendar.MONTH, 1); // moving to some day of next month
  gcal.set(Calendar.DAY_OF_MONTH, 1); // moving to first day of current month
  gcal.add(Calendar.DATE, -1); // moving to last day of previous month
}


因此,您的最终代码应如下所示:

calendar1.add(Calendar.MONTH, 1);
moveToEndOfMonth(calendar1);


为什么? @DavidCAdams的分析是正确的,请参见他的答案。

10-07 19:08
查看更多