我选择开始日期(例如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的分析是正确的,请参见他的答案。