没有时间的日期比较

Date compare without time

我知道这是一个被问过很多次的问题,但我已经筛选过了,似乎找不到能完全帮助我的答案。我首先要说我不能使用 Joda。

我正在对一个程序进行更改,该程序要求我将用户输入日期(开始日期)与列中的日期进行比较。

无法使用 SQL 完成请求,因为返回结果后,此列的日期检查过滤器必须为 运行。

代码正在检查 table 上的一个条目,在 "From Date" 和字段条目之间进行比较,然后它会根据布尔值 [=] 是否显示该行数据33=]一个真或假。

除了一个部分外,所有代码都运行良好。它检查 table 上的日期是否大于或等于 "From Date".

示例:

The user enters the date 13/04/2015.

The program SHOULD return all rows with the date field that is 13/04/2015 or later.

The program actually returns all dates that are 1 day after this date. i.e. anything that is 14/04/2015 and onwards.

我检查这部分的代码是:

private boolean checkArngdDateCriteria(OrderBean singleOrderBean) {
    if (getSearchArngdFromDate().getValue()!= null || getSearchArngdToDate().getValue()!= null) {
        Date checkArngdToDate = (Date)getSearchArngdToDate().getValue();
        Date checkArngdFromDate = (Date)getSearchArngdFromDate().getValue();

        if (getSearchArngdFromDate().getValue()!= null && getSearchArngdToDate().getValue()== null && singleOrderBean.getOrdStatD()!= null) {
            if (singleOrderBean.getOrdStatD().after(checkArngdFromDate) || singleOrderBean.getOrdStatD().equals(checkArngdFromDate)) {
                return true;
            }
        }

EDIT:

//This retrieves the date from the results table
singleOrderBean.getOrdStatD()

//This retrieves the value from the user input field (retrieved as Object)
getSearchArngdFromDate().getValue()

有没有人知道一些代码可以使 From Date 被视为等于或小于 table 日期(如果它们都是 13/04/2015)?

日期 class 包括时间字段(以及各种其他字段)。您正在比较 'after' 或 'equals'。但是,'equals' 并没有按照您的想法行事。这不仅仅是比较日期。只有 return true 如果 所有 字段相等。修复它的最简单方法是,不要执行 'after or equals',而是执行 'not before'.

        if (!singleOrderBean.getOrdStatD().before(checkArngdFromDate)) {
            return true;
        }

对于任何想知道的人,最终代码最终为:

private boolean checkArngdDateCriteria(OrderBean singleOrderBean) {
    if (getSearchArngdFromDate().getValue()!= null || getSearchArngdToDate().getValue()!= null) {
        Date checkArngdFromDate = (Date)getSearchArngdFromDate().getValue();
        Date checkArngdToDate = (Date)getSearchArngdToDate().getValue();

        if (getSearchArngdFromDate().getValue()!= null) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(checkArngdFromDate);
            cal.set(Calendar.HOUR_OF_DAY, 0);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);
            checkArngdFromDate = cal.getTime();
        }

        if (getSearchArngdFromDate().getValue()!= null && getSearchArngdToDate().getValue()== null && singleOrderBean.getOrdStatD()!= null) {
            if (!singleOrderBean.getOrdStatD().before(checkArngdFromDate)) {
                return true;
            }
        }

我不得不将日历部分放在 if statement 中,这样它就不会干扰稍后检查 if (getSearchArngdFromDate().getValue()== null && ...)

if statement