如何检查startTime和startDate是否小于endTime和endDate?

时间:2016-11-19 06:17:48

标签: android validation android-calendar android-datepicker android-timepicker

我正在开发一个应用,我想在其中检查startTimestartDate是否小于endTimeendDate,如果只是信息应保存在FirebaseDatabase

我使用此代码检查startTime< endTimestartDate< endDate

        try {
            Date date1 = currentTime.parse(btnChooseStartTime.getText().toString());
            Date date2 = currentTime.parse(btnChooseEndTime.getText().toString());
            differenceBetweenStartEndTime = date2.getTime() - date1.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
    }

            isEndDateGreaterThanStartDate = CheckDates(btnChooseEndDate.getText().toString(), btnChooseStartDate.getText().toString());

            if (String.valueOf(differenceBetweenStartEndTime).contains("-")) {
               Snackbar snackbar = Snackbar
                                  .make(coordinatorLayout, "Start time is greater than end time. Fix it please.", Snackbar.LENGTH_SHORT);
               snackbar.setDuration(3500);
               snackbar.show();
               progressDialogPostingE.dismiss();
            } else if (!isEndDateGreaterThanStartDate) {
               Snackbar snackbar = Snackbar
                                  .make(coordinatorLayout, "Start date is greater than end date. Fix it please.", Snackbar.LENGTH_SHORT);
               snackbar.setDuration(3500);
               snackbar.show();
               progressDialogPostingE.dismiss();
            } else {
// code for storing information in database
}

此处CheckDates()方法:

public static boolean CheckDates(String d2, String d1)    {
        SimpleDateFormat dfDate  = new SimpleDateFormat("dd-MM-yyyy");
        boolean b = false;
        try {
            if(dfDate.parse(d1).before(dfDate.parse(d2)))
            {
                b = true;//If start date is before end date
            }
            else if(dfDate.parse(d1).equals(dfDate.parse(d2)))
            {
                b = true;//If two dates are equal
            }
            else if (dfDate.parse(d2).before(dfDate.parse(d1)))
            {
                b = false; //If start date is after the end date

            }
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return b;
    }

此代码工作得很好,但是当我设置startDate = 20-11-2016和startTime = 10 AM然后endDate = 21-11-2016和endTime = 8 AM时,我"Start time is greater than end time. Fix it please."显示SnackBar,因为8 AM小于10 AM,但是上午10点是前一天,上午8点是第二天。因此,它应该将数据存储在数据库中,而不是显示SnackBar。

有什么问题以及如何解决这个问题?

请告诉我。

1 个答案:

答案 0 :(得分:2)

使用小时,分钟和秒添加SimpleDateFormat

 SimpleDateFormat dfDate  = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
  boolean b = false;
    try {
        if(dfDate.parse(d1).before(dfDate.parse(d2)))
        {
            b = true;//If start date is before end date
        }
        else if(dfDate.parse(d1).equals(dfDate.parse(d2)))
        {
            b = true;//If two dates are equal
        }
        else if (dfDate.parse(d2).before(dfDate.parse(d1)))
        {
            b = false; //If start date is after the end date

        }