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 に答える