我选择开始日期(例如2014年1月31日)和结束日期(例如2014年12月31日),我每个月都会插入一条记录。如果我下个月是2月28日,那么我总是得到28虽然3月,4月等。 我该怎么办?我希望我解释了
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);
...
}
}
答案 0 :(得分:1)
您在哪里创建日历对象?由于你正在增加MONTH,并且它是1月30日,你将在下个月获得2月28日,因为下个月只有28天。 2014年2月30日没有。此后,当你增加月份时,你会得到3月28日,4月28日等等。
答案 1 :(得分:0)
假设您谈论的是课程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的分析是正确的,请参阅他的回答。