我需要在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
表,其中日期存储为格式化的字符串,例如" 2013年11月和#34;或" 2014年12月&#34 ;;是的,我知道糟糕的设计。
我需要做的是查看循环中当前行中的日期是否早于本月;如果是这样,我将把它从SQLite DB中删除(我有那个代码很好)。
那么,如何构建我可以比较的两个变量,如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());
EDIT2:
这是我到目前为止所拥有的
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();
}
答案 0 :(得分:2)
您想要比较的价值并不完全清楚。很容易看出"现在"比某个月的第一天开始晚:
// 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在评论中的建议分别解析月份和年份。