2014-06-18 3 views
0

С помощью этого запроса я выбираю месяц в базе данных. Курсор вернет точный месяц, но когда я сделаю преобразование, чтобы отобразить полное имя, появится следующий месяц. Например, курсор возвращает 6, вместо этого метод возвращает getDisplayName July.Ошибка Android при преобразовании имени месяца

SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase(); 

    String sql = "SELECT DISTINCT strftime('%m',"+Table.DATA+") FROM "+Table.TABLE_NAME; 
    Cursor c = db.rawQuery(sql, null); 

    while (c.moveToNext()){ 
     int monthNumero = (c.getInt(0)); 

     Calendar ca = Calendar.getInstance(); 
     ca.set(Calendar.MONTH, monthNumero); 
     String monthName = ca.getDisplayName 
       (Calendar.MONTH, Calendar.LONG, Locale.getDefault()).toUpperCase(); 

     result1.add(monthName); 

    } 
    db.close(); 

ответ

3

Например, курсор возвращает 6, а не метод возвращает GetDisplayName июля.

Да, было бы. Потому что «логическое поле» Calendar.MONTH основано на 0. (Сумасшедшие решение, но ...)

В основном вам нужно вычесть 1 из номера месяца:

ca.set(Calendar.MONTH, monthNumero - 1); 

Например Calendar.JANUARY документирована как имеющий значение 0.

+0

нормально, Но теперь Я вижу, что имя месяца в spinner, и мне нужно преобразовать в целое число, чтобы сделать другой запрос. Я делаю это: 'String mese = monthSelector.getSelectedItem(). ToString(); \t \t Календарь cal = Calendar.getInstance(); \t \t try { \t \t cal.setTime (новый SimpleDateFormat ("MMMM"). Parse (mese)); \t \t} задвижка (ParseException е) {\t \t \t \t \t \t e.printStackTrace(); \t \t} \t \t int monthInt = cal.get (Calendar.MONTH + 1); \t \t Строковый месяцConverted = "" + monthInt; \t \t if (monthInt <10) { \t \t monthConverted = "0" + monthConverted; \t \t} ' но я получаю месяц как номер 23! Зачем? – user2847219

+1

@ user2847219: Потому что вы хотите 'cal.get (Calendar.MONTH) + 1', а не' cal.get (Calendar.MONTH + 1) '- вы в настоящее время получаете совсем другое поле! –

+0

Вы правы. благодаря – user2847219

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