2014-01-31 4 views
0

Я выбираю дату начала (пример 31/01/2014) и дату окончания (пример 31/12/2014), каждый месяц я вставляю запись. Если я получу следующий месяц - 28 февраля, но тогда я всегда получаю 28, хотя в марте, апреле и т. Д. Как я могу исправить? Я надеюсь, что я объяснилКалендарный день месяца Android

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

Пожалуйста, попробуйте более подробно описать вашу проблему. – SQLiteNoob

ответ

0

Предполагая, что вы говорите о классе GregorianCalendar - Вместо calendar1.add(Calendar.MONTH, 1) попробуйте также позвонить следующему методу as работать вокруг:

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 прав, см. Его ответ.

+0

Я не могу изменить код в соответствии с вашим предложением. Вы можете мне помочь? Спасибо – user2976522

+0

@ user2976522 вам просто нужно добавить вызов moveToEndOfMonth (calendar1); 'за вашей строкой' calendar1.add (Calendar.MONTH, 1); 'И, конечно, вам нужно определить ваш вспомогательный метод' moveToEndOfMonth (GregorianCalendar) ' где-нибудь еще в вашем классе, но это просто базовая Java. –

+0

Извините, я был в замешательстве. ваше решение работает отлично! – user2976522

1

Где вы создаете объекты для работы с календарем? Поскольку вы увеличиваете MONTH, и это 30 января, вы получаете 28 февраля следующего месяца, так как в следующем месяце у него всего 28 дней. Нет 30 февраля 2014 года. После этого, когда вы увеличиваете месяц, вы получаете 28 марта, 28 апреля и т. Д.

+0

Здравствуйте, меня интересует ваш ответ, и я спрашиваю вас, если пользователь нажимает 31 и 12 января, хотите вставить записи на этот день, я вставляю элемент управления, который проверяет, сколько дней имеет следующий месяц? или есть более простой способ? – user2847219

Смежные вопросы