为了在SQLite数据库中存储Calendar对象,我发现最简单的方法是将Calendar对象转换为字符串并将其作为文本存储在数据库中。
现在,问题在于从字符串中提取存储的日期。
如何解析包含Calendar对象的字符串并将其设置为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
现在,如何从存储的字符串中检索DAY,MONTH和YEAR?
我在这里阅读了有关如何将日期字符串转换为日历对象的信息: How to convert a date String to a Date or Calendar object?
但我的字符串不只是一个日期字符串。它也包含很多其他细节。
前进的最佳方式是什么?
答案 0 :(得分:5)
更改您的数据模型以使用Date
。这是存储在数据库中的常用类型。
您可以使用
将Date
设置为Calendar
Calendar c = Calendar.getInstance();
c.setTime(date);
要从Date
中检索Calendar
,您可以使用
date = c.getTime();
使用String
在数据库中存储Date
需要格式化和解析String
,并且除了数据库之外也无需进行比较。
答案 1 :(得分: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";
}