想要将日期与今天的日期进行比较并更新数据库。

时间:2012-10-31 11:41:11

标签: android-sqlite

我正在尝试将用户输入的日期与今天的日期进行比较,并相应地更新数据库。这就是我在做的事情..

Calendar c = Calendar.getInstance();
    SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy");
    today = df.format(c.getTime());
    //=================================================================== 
    try{
    ContentValues val1 = new ContentValues();
    val1.put(CPUser.Data.TASK_TYPE, "Todays Task");
    getContentResolver().update(CPUser.Data.CONTENT_URI, val1, CPUser.Data.TASK_DUE_DATE + "=" +"'"+today+"'",null);

    ContentValues val2 = new ContentValues();
    val2.put(CPUser.Data.TASK_TYPE, "Overdue Task");
    getContentResolver().update(CPUser.Data.CONTENT_URI, val2, CPUser.Data.TASK_DUE_DATE + "<" +"'"+today+"'",null);

    ContentValues val3 = new ContentValues();
    val3.put(CPUser.Data.TASK_TYPE, "Active Task");
    getContentResolver().update(CPUser.Data.CONTENT_URI, val3, CPUser.Data.TASK_DUE_DATE + ">" +"'"+today+"'",null);
    }
    Catch(Exception ex)
    {   }   

1 个答案:

答案 0 :(得分:2)

如果要将日期作为文本存储在数据库中,则必须始终使用“yyyy-MM-dd”格式,否则您将无法进行除等于(“=”)之外的比较。我所做的是使用Unix Epoch将所有日期,时间和时间戳保存为INT。这允许您以不同的格式显示日期(例如使用区域设置)来显示日期,而无需先解析日期。它还允许任何类型的比较(等于,大于等)。功能很直接:

public static long timestampFromUnixEpoch(long unixepoch) {
    if (unixepoch == 0)
        return 0;
    return (unixepoch * 1000) - TimeZone.getDefault().getRawOffset();
}

public static long unixEpochFromTimestamp(long timestampMS) {
    if (timestampMS == 0)
        return 0;
    return ((timestampMS + TimeZone.getDefault().getRawOffset()) / 1000);
}

public static long dateToUnixEpoch(Date date) {
    if (date == null)
        return 0;
    return unixEpochFromTimestamp(date.getTime());
}

public static Date unixEpochToDate(long unixepoch) {
    if (unixepoch == 0)
        return null;
    return new Date(timestampFromUnixEpoch(unixepoch));
}