2013-07-17 2 views
0

Чтобы сохранить объект Calendar в базе данных SQLite, я обнаружил, что самый простой способ - преобразовать объект Calendar в строку и сохранить его в базе данных в виде текста.Как преобразовать String в объект Calendar?

Теперь проблема заключается в извлечении сохраненной даты из строки.

Как выполнить синтаксический анализ строки, содержащей объект «Календарь», и установить его в значение «Календар»?

Мой код:

String CREATE_DOCTORS_TABLE = "CREATE TABLE " + TABLE_DOCTORS + "(" 
      + KEY_ID_DOC + " INTEGER PRIMARY KEY," + KEY_DOCTOR_NAME + " TEXT,"    
      + KEY_CLINIC_ADDRESS + " TEXT," + KEY_LAST_CHECKUP + " TEXT" + ");"; 
    db.execSQL(CREATE_DOCTORS_TABLE);  

где KEY_LAST_CHECKUP содержит значение, как это:

java.util.GregorianCalendar[time=?,areFieldsSet=false,lenient=true,zone=Asia/Calcutta,firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2013,MONTH=4,WEEK_OF_YEAR=29,WEEK_OF_MONTH=3,DAY_OF_MONTH=16,DAY_OF_YEAR=198,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=19,SECOND=47,MILLISECOND=823,ZONE_OFFSET=19800000,DST_OFFSET=0] 

и я хранил его в базе данных таким образом:

values.put(KEY_LAST_CHECKUP, (doctor.getLastCheckUpDate().toString())); // last check up date 

сейчас , как я могу получить ДЕНЬ, МЕСЯЦ и ГОД из сохраненной строки?

Я читал о том, как преобразовать строку даты в календарном объект здесь: How to convert a date String to a Date or Calendar object?

но моя строка не просто строка даты. Он содержит много других деталей.

Каков наилучший способ продвижения вперед?

+1

Почему вы храните календарь, а не объект Date? – user1516873

+1

См. Http://stackoverflow.com/questions/10392870/gregoriancalendar-and-sqlite для получения лучших решений. – CommonsWare

ответ

5

Изменить модель данных на Date. Это обычный тип, который будет храниться в базе данных.

Вы можете установить Date к Calendar с помощью

Calendar c = Calendar.getInstance(); 
c.setTime(date); 

Чтобы получить Date из Calendar вы можете использовать

date = c.getTime(); 

Использование String для хранения Date в базе данных, необходимо форматирование и синтаксический анализ String s, а также сравнение не может быть выполнено.

+0

Я попытался создать свой datamodel с Date, а не String. Но тогда я не могу использовать метод put в этой ситуации. То есть, values.put (KEY_LAST_CHECKUP, doctor.getLastCheckUpDate(); дает мне ошибку, говоря, что Метод put (String, String) в типе ContentValues ​​не применим для аргументов (String, Calendar) –

+0

@Kaushal Какой тип является переменной 'values'? Также вы должны использовать 'values.put (KEY_LAST_CHECKUP, doctor.getLastCheckUpDate(). GetTime());' затем получить 'Date' вместо' Calendar'. –

+0

'values' - это объект ContentValues. также, 'doctor.getLastCheckUpDate()' - метод, который возвращает сам объект календаря. –

3

Если вы хотите сохранить строковое значение в столбце KEY_LAST_CHECKUP. Попробуйте использовать SimpleDateFormat.

Если вы храните долгосрочную стоимость, вам не нужно использовать SimpleDateFormat.

Для вставки:

SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 
String strDate = simpleFormat.format(doctor.getLastCheckUpDate()); 
values.put(KEY_LAST_CHECKUP, strDate); 

Для получения:

try { 
    String strDate = --> from DB 
    Date parsedDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(strDate); 
    Calendar c = Calendar.getInstance(); 
    c.setTime(parsedDate); 
} catch (ParseException e) { 
    return "Unknown"; 
} 
Смежные вопросы