我有两个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
对于日期比较是错误的。有人能帮我吗?谢谢:))
答案 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()更安全,因此您知道在比较中考虑的唯一字段是年,月和日。