【问题标题】:End-date greater than start-date validation - Android结束日期大于开始日期验证 - Android
【发布时间】:2014-11-18 00:15:04
【问题描述】:

我有两个 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) &lt; 0 的日期比较是错误的。有人能帮我吗?谢谢:)

【问题讨论】:

  • 考虑切换到 Joda-Time joda.org/joda-time,而不是使用内置的 Java 日期/时间工具,这不太好。

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


【解决方案1】:

你说得对,比较代表日期的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 而不是为endDate 再次执行Calendar.getInstance() 是因为在日历对象上调用.set(...) 不会更新毫秒字段。使用 clone() 更安全,因此您知道比较中的唯一字段是年、月和日。

【讨论】:

    猜你喜欢
    • 2012-08-31
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    相关资源
    最近更新 更多