Android:检查系统日期是否小于或等于指定日期

时间:2013-11-08 04:38:13

标签: java android date compare

在我的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 个答案:

答案 0 :(得分:4)

我正在使用此

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;
}

答案 1 :(得分: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;

}

答案 2 :(得分:0)

如果您想在忽略时间部分后比较日期,那么this SO问题将为您提供洞察力。另请参阅 Pankaj Kumar

发布的SO问题链接

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

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

答案 3 :(得分:0)

  1. 将日期字符串转换为日历,并以毫秒为单位从MilliSeconds中获取时间。您必须使用DateFormatter进行转换。

  2. 获取另一个Calendar对象,并在另一个long中获得MilliSeconds中的时间。这是系统时间。

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

  4. 希望它有所帮助。