【问题标题】:How to check if startTime and startDate is less than endTime and endDate?如何检查 startTime 和 startDate 是否小于 endTime 和 endDate?
【发布时间】:2016-11-19 06:17:48
【问题描述】:

我正在开发一个应用程序,我想检查startTimestartDate 是否小于endTimeendDate,如果是,那么只有信息应该保存在FirebaseDatabase

我正在使用此代码检查startTime endTime 和startDate 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 AM 是前一天的,8 AM 是第二天的。因此,它应该将数据存储在数据库中,而不是显示 SnackBar。

出了什么问题以及如何解决?

请告诉我。

【问题讨论】:

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


    【解决方案1】:

    添加带有小时、分钟和秒的 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
    
            }
    

    【讨论】:

    • 我需要更改在数据库中存储日期和时间的方式吗?
    • 是的,您可以像这种格式存储 dd-MM-yyyy HH:mm:ss...或者在检查验证之前解析日期
    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多