1

在我的 android 应用程序中有一个用户定义的日期。此日期应大于或等于系统日期。如果是,则过程将继续。如果不是,那么它给出一个祝酒词后续日期应该大于或等于系统日期

我使用了这个代码段。

if (sys_date.after(df.parse((date.getText().toString())))) {
    Toast.makeText(getActivity(), "Follow up date should be greater than or equal to system date", Toast.LENGTH_SHORT).show();
} else {
    //process will continue
}

但问题是:即使用户定义的日期等于系统日期,它也会发出 toast 消息。

任何人都可以很好地解释这里发生了什么以及我该如何解决这个问题。

提前感谢

4

4 回答 4

6

我正在使用这个

public static boolean isAfterToday(int year, int month, int day)
{
    Calendar today = Calendar.getInstance();
    Calendar myDate = Calendar.getInstance();

    myDate.set(year, month, day);

    if (myDate.before(today)) 
    {
        return false;
    }
    return true;
}
于 2013-11-08T06:32:43.623 回答
2

我已经让这个方法验证了所有可能的日期验证。它可以帮助你。

    public static final int DATE_EQUAL_TO_TODAY = 1;
    public static final int DATE_EQUAL_TO_GREATER_THAN_TODAY = 2;
    public static final int DATE_EQUAL_TO_LESS_THAN_TODAY = 3;
    public static final int END_DATE_GREATER_OR_EQUAL_TO_START_DATE=4;
    public static final int END_DATE_CAN_GREATER_THAN_TODAY=5;
    public static int DATE_SHOULD_BE_GREATER_THAN_TODAY=6;
    public static boolean dateVadidation(String date,int validationType)
    {
    String currentDate = showDateFormat(System.currentTimeMillis());
    SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy");
    if (validationType == DATE_EQUAL_TO_TODAY) {

        try {

            Date dtCurrent = df.parse(currentDate);


            Date dtCompareWith = df.parse(date);

            return dtCurrent.before(dtCompareWith)  || dtCurrent.after(dtCompareWith);

        } catch (Exception e) {
            Log.e("DATE_EQUAL_TO_TODAY", "Date Parsing Exception:" + e.getMessage());
        }
    }
    if(validationType == DATE_EQUAL_TO_GREATER_THAN_TODAY)
    {
        try {

            Date dtCurrent = df.parse(currentDate);


            Date dtCompareWith = df.parse(date);

            return dtCurrent.after(dtCompareWith);


        } catch (Exception e) {
            Log.e("DATE_EQUAL_TO_GREATER_THAN_TODAY", "Date Parsing Exception:" + e.getMessage());
        }
    }
    if(validationType == DATE_EQUAL_TO_LESS_THAN_TODAY)
    {
        try {

            Date dtCurrent = df.parse(currentDate);


            Date dtCompareWith = df.parse(date);

            return dtCurrent.before(dtCompareWith);

        } catch (Exception e) {
            Log.e("DATE_EQUAL_TO_LESS_THAN_TODAY", "Date Parsing Exception:" + e.getMessage());

        }
    }

    if(validationType==END_DATE_CAN_GREATER_THAN_TODAY)
    {
    try {


        Date dtTo = df.parse(date);

        Date dtCurrent = df.parse(currentDate);

        return dtTo.before(dtCurrent) ;

    }

    catch (Exception e) {
        Log.e("END_DATE_CAN_GREATER_THAN_TODAY", "Date Parsing Exception:" + e.getMessage());
    }
    }

    if(validationType==DATE_SHOULD_BE_GREATER_THAN_TODAY)
    {
    try {


        Date dtTo = df.parse(date);

        Date dtCurrent = df.parse(currentDate);


        return (dtTo.after(dtCurrent) && (! dtTo.equals(dtCurrent))) ;

    }
    catch (Exception e) {
        Log.e("DATE_SHOULD_BE_GREATER_THAN_TODAY", "Date Parsing Exception:" + e.getMessage());
    }
    }
    return false;

}
于 2013-11-08T04:48:52.687 回答
0

如果您想在忽略时间部分后比较日期,那么这个SO 问题将为您提供见解。另请参阅Pankaj Kumar发布的 SO 问题链接

Date对象实现Comparable接口。因此,您可以使用compareTo方法进行精确的日期比较(包括时间组件)。当然,如果Date.getTime()方法为被比较的两个日期实例返回相同的 long 值,则Date.equals()将返回 true 。

我建议使用成熟的库,例如Joda注意这里讨论的一些内存问题和解决方法。

于 2013-11-08T05:09:16.683 回答
0
  1. 将日期字符串转换为日历,并从中获取以毫秒为单位的时间。您必须使用 DateFormatter 进行转换。

  2. 取另一个 Calendar 对象并在另一个 long 中获取以 MilliSeconds 为单位的时间。这是系统时间。

  3. 比较以上两个长变量。

希望能帮助到你。

于 2013-11-08T05:15:03.120 回答