Java 如何将字符串转换为日历对象?

Java 如何将字符串转换为日历对象?,java,android,calendar,android-calendar,android-date,Java,Android,Calendar,Android Calendar,Android Date,要在SQLite数据库中存储日历对象,我发现最简单的方法是将日历对象转换为字符串,并将其作为文本存储在数据库中 现在,问题在于从字符串中提取存储的日期 如何解析包含日历对象的字符串并将其设置为日历值 我的代码是: String CREATE_DOCTORS_TABLE = "CREATE TABLE " + TABLE_DOCTORS + "(" + KEY_ID_DOC + " INTEGER PRIMARY KEY," + KEY_DOCTOR_NAME +

要在SQLite数据库中存储日历对象,我发现最简单的方法是将日历对象转换为字符串,并将其作为文本存储在数据库中

现在,问题在于从字符串中提取存储的日期

如何解析包含日历对象的字符串并将其设置为日历值

我的代码是:

    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
现在,如何从存储的字符串中检索日期、月份和年份

我在这里了解了如何将日期字符串转换为日历对象:

但我的字符串不仅仅是日期字符串。它还包含许多其他细节


前进的最佳方式是什么?

更改数据模型以使用日期。这是存储在数据库中的常用类型

您可以使用将日期设置为日历

Calendar c = Calendar.getInstance();
c.setTime(date);
要从
日历中检索
日期
,可以使用

date = c.getTime();

使用
字符串
在数据库中存储
日期
需要对
字符串
进行格式化和解析,也无法对数据库进行比较。

如果希望将字符串值保留在
键上次检查
列中。尝试使用
SimpleDataFormat

如果保留long值,则不需要使用
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";
}

为什么要存储日历而不是日期对象?有关更好的解决方案,请参阅。我尝试使用日期而不是字符串创建数据模型。但是,在这种情况下,我不能使用put方法。也就是说,values.put(KEY_LAST_CHECKUP,doctor.getLastCheckUpDate();给我一个错误,告诉我ContentValues类型中的方法put(String,String)不适用于参数(String,Calendar)@Kaushal变量
values
?您还必须使用
values.put(KEY_LAST_CHECKUP,doctor.getLastCheckUpDate()).getTime());
然后获取
日期
而不是
日历
是一个
内容值
对象。另外,
医生.getLastCheckUpDate()
是一个返回日历对象本身的方法。对于
内容值
可以使用
值(按上次检查键,doctor.getLastCheckUpDate().getTimeInMillis());
将其存储为
long
。再次使用
cal.setTimeInMillis()设置
日历
。是的,这听起来很可行。现在,如果我使用
values.put
输入一个
long
值,那么我就可以在sqlite中创建表时使用
integer
数据类型,对吗?