结束日期大于开始日期验证 - Android

时间:2014-11-18 00:15:04

标签: android date if-statement android-fragments android-datepicker

我有两个DatePicker。一个有开始日期,另一个有结束日期。我需要进行验证并检查结束日期是否大于开始日期。

我完成了这样的代码:

DatePicker sdateInput = (DatePicker) getActivity().findViewById(R.id.SDate);
DatePicker edateInput = (DatePicker) getActivity().findViewById(R.id.EDate);

final String strSdate = sdateInput.getDayOfMonth() + "/"
                + (sdateInput.getMonth() + 1) + "/" + sdateInput.getYear();
final String strEdate = edateInput.getDayOfMonth() + "/"
                + (edateInput.getMonth() + 1) + "/" + edateInput.getYear();

}else if(strEdate.compareTo(strSdate) < 0){
            //To check end date
            new AlertDialog.Builder(getActivity())
                    .setTitle("Confirmation")
                    .setMessage("Please Enter Valid End Date.")
                    .setNeutralButton("Back", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    // do nothing - it will just close when clicked
                                }
                            }).show();
        }

此验证仅适用于特定日期。我认为strEdate.compareTo(strSdate) < 0对于日期比较是错误的。有人能帮我吗?谢谢:))

1 个答案:

答案 0 :(得分:0)

你是对的,比较代表日期的Strings不是执行日期比较的正确方法。如果您从输入日期创建Calendar个对象,则比较更容易:

Calendar startDate = Calendar.getInstance();
Calendar endDate = startDate.clone();
startDate.set(sdateInput.getYear(), sdateInput.getMonth(), sdateInput.getDayOfMonth(), 0, 0, 0);
endDate.set(edateInput.getYear(), edateInput.getMonth(), edateInput.getDayOfMonth(), 0, 0, 0);

if (startDate.after(endDate))
{
      new AlertDialog.Builder(getActivity())
                .setTitle("Confirmation")
                .setMessage("Please Enter Valid End Date.")
                .setNeutralButton("Back", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                // do nothing - it will just close when clicked
                            }
                        }).show();
}

作为澄清,我正在克隆startDate而不是再次Calendar.getInstance() endDate的原因是因为在Calendar对象上调用.set(...)将不会更新毫秒字段。使用clone()更安全,因此您知道在比较中考虑的唯一字段是年,月和日。