日历日期Android

时间:2014-01-31 01:05:51

标签: java android loops calendar gregorian-calendar

我选择开始日期(例如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);
    ...
  }
}

2 个答案:

答案 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的分析是正确的,请参阅他的回答。