gpt4 book ai didi

java - 我想我想出了比较两个日期的最糟糕的方法;有可能让它变得更好吗?

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:29 25 4
gpt4 key购买 nike

我的应用程序通过日期选择器 fragment 接受用户提供的日期,并将其存储在数据库中,其中日、月和年作为字符串类型的单独列。

现在,我正在创建一个函数,稍后将使用系统的当前日期检查这些日期中的每一个。如果当前日期早于用户输入的日期(并存储在数据库中),则会增加一个标志变量。

代码如下:

public int checkDate() {                                    //Method to check date and take action
//NOT COMPLETE. STILL FIGURING IT OUT.

String isstatus = "Ongoing";
String[] columns = new String[] {KEY_ROWID, DAY, MONTH, YEAR ,PROJECT_STATUS};
Cursor c = projectDatabase.query(DATABASE_TABLE, columns, PROJECT_STATUS + "=" + isstatus, null, null, null, null);
int result = 0;
int flag = 0;

int iRow = c.getColumnIndex(KEY_ROWID);
int iDay = c.getColumnIndex(DAY);
int iMonth = c.getColumnIndex(MONTH);
int iYear = c.getColumnIndex(YEAR);

final Calendar cal = Calendar.getInstance(); //fetch current system date
int cyear = cal.get(Calendar.YEAR);
int cmonth = cal.get(Calendar.MONTH);
int cday = cal.get(Calendar.DAY_OF_MONTH);


for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {

String id = c.getString(iRow);

int fday = Integer.parseInt(c.getString(iDay));
int fmonth = Integer.parseInt(c.getString(iMonth));
int fyear = Integer.parseInt(c.getString(iYear));

if(cday>fday && cmonth>fmonth && cyear>fyear) {

flag++;
updateStatus(id, "Missed");

}

else

if(cday>fday && cmonth==fmonth && cyear==fyear) {

flag++;
updateStatus(id, "Missed");

}

else

if(cday==fday && cmonth>fmonth && cyear>fyear) {

flag++;
updateStatus(id, "Missed");

}

else

if(cday==fday && cmonth==fmonth && cyear>fyear) {

flag++;
updateStatus(id, "Missed");

}

else

if(cmonth>fmonth && cyear>fyear) {

flag++;
updateStatus(id, "Missed");

}

else

if(cmonth>fmonth && cyear==fyear) {

flag++;
updateStatus(id, "Missed");

}

result = flag;


}


return result;
}

如您所见,我必须比较 future 日期的所有可能情况。而且我个人认为这不是最有效的方法。有什么建议吗?

最佳答案

我从来没有真正使用过日期,但我将概述一个算法,它至少可以减少您需要进行的比较次数。

if(currentYear > dataYear) {
//We're obviously past that date. Move on
} else if(currentYear == dataYear) {
//We're in the same year. Let's check for months
if(currentMonth > dataMonth) {
//Missed the date again, move on
} else if(currentMonth == dataMonth) {
//We're in the same year and the same month! Let's check days
if(currentDay > dataDay) {
//Date is still in the past. Keep moving on
} else if(currentDay == dataDay) {
//Date is today
} else {
//Date is in the future
}
}
} else {
//Date is in the past
}

这也不会非常有效,您可以通过策略性地使用 && 来减少 if 语句的数量(尽管编译器优化可能会为您做这件事)。

更好的方法是以 UNIX 时间保存日期,然后获取当前的 UNIX 时间并比较两个 long。没有比这更简单的了。

您还可以根据存储的日期构造另一个 Calendar 对象并使用 before() .但是,原始的长与长比较比比较两个日历更有效。

关于java - 我想我想出了比较两个日期的最糟糕的方法;有可能让它变得更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15440825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com