使用 before 方法比较两个日期(将格式日期设置为字符串和当前时间)



我需要在Java中使用before方法。 所以我可以像这样做日期比较代码:

if (storedDate.before(currentMonth)) {
}

其中currentMonth设置如下:

int thisMonth = Calendar.getInstance().get(Calendar.MONTH) + 1;
cal = Calendar.getInstance(); df = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
cal.set(Calendar.MONTH, thisMonth);
// Do I even need to convert like this to match what is stored in the DB below?

storedDate循环遍历一个SQLite表,其中日期存储为格式化字符串,例如"Nov 2013"或"Dec 2014"; 是的,我知道糟糕的设计。

我需要做的是查看循环中当前行中的日期是否早于本月;如果是这样,我将从SQLite数据库中删除它(我有那个代码很好)。

那么,我如何构建两个变量,我可以像这样进行比较if (storedDate.before(currentMonth)) {

编辑

以下是将月份存储到数据库中的方式:

            monthTotal = monthTotal + 1;
            Calendar myDate = Calendar.getInstance();
            myDate.add(Calendar.MONTH, monthTotal);
            SimpleDateFormat dfEng = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
            String finalDBDate = dfEng.format(myDate.getTime());

编辑2:

这是我到目前为止所拥有的

private void deleteOldSpecialPayments() {
    int thisMonth = Calendar.getInstance().get(Calendar.MONTH) + 1;
    cal = Calendar.getInstance();
    df = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
    cal.set(Calendar.MONTH, thisMonth);
    String thisMonthS = df.format(cal.getTime());
    Date currentDate = null;
    try {
        currentDate = df.parse(thisMonthS);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    if (!database.isOpen()) {
        open();
    }
    Cursor cursor = database.query(MySQLiteHelper.TABLE_CUSTOM_PAYMENTS, allLedgerColumns, null, null, null, null, null);
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        SpecialPayment sp = cursorToCustomPayments(cursor);
        try {
            Date d = df.parse(sp.month);
            if (d.before(currentDate)) {
                // DELETE ROW
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        cursor.moveToNext();
    }
    // Make sure to close the cursor
    cursor.close();
}

目前还不完全清楚您要比较什么值。很容易看出"现在"是否晚于特定月份的 1 号开始:

// TODO: For testing purposes, you'd want a Clock abstraction to be injected.
Date now = new Date();
DateFormat format = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
// Each row...
for (...) {
    Date storedDate = format.parse(textFromDatabase);
    if (now.compareTo(storedDate) >= 0) {
        // It is now on or after the start of the given month
    }
}

但是,您可能不希望将月初存储在数据库中 - 您可能希望下个月的开始。例如,如果存储的月份是"2015 年 7 月",则您可能希望在用户时区的 7 月初时立即删除该行 - 或者您可能希望等到 8 月初。对于 8 月初,您可以使用 java.util.Calendar(或理想情况下的 Joda Time)在存储的日期中添加一个月,或者您可以按照 Elliott 在评论中的建议分别解析月份和年份。

相关内容

  • 没有找到相关文章

最新更新