1

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

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)
    {   }   
4

1 回答 1

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));
}
于 2012-12-06T12:11:27.650 回答