我正在使用我的Android应用,但遗憾的是我遇到了一个问题,而这个问题并未涉及到任何地方。解析错误的日期,如标题中所述,我的代码示例在这里:
EditText date_field = (EditText) findViewById(R.id.date);
String date = date_field.getText().toString();
DateFormat date_format = SimpleDateFormat.getDateInstance(DateFormat.SHORT);
try
{
date_format.parse(date);
}
catch (ParseException e)
{
Toast.makeText(this, "Please specify the date", Toast.LENGTH_SHORT).show();
return;
}
问题是它没有捕获“0.0.0”或“03.06.05”等输入的异常。我试过用这样的手工制作的DateFormat:
DateFormat date_format = new SimpleDateFormat("dd.MM.yyyy");
但它也没有帮助。有谁知道为什么解析错误的日期?
答案 0 :(得分:1)
使用DatePicker而不是EditText进行日期输入。
XML:
<DatePicker
android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Android文档:http://developer.android.com/reference/android/widget/DatePicker.html
答案 1 :(得分:1)
考虑使用DatePickerDialog。避免错误日期输入的一些有用方法: getDatePicker()。setMinDate(millis)和 getDatePicker()。setMaxDate(millis)
示例:
<强> UI 强>
birthday = (EditText) rootView.findViewById(R.id.birthday);
birthday.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int code = event.getAction() & MotionEvent.ACTION_MASK;
switch (code) {
case MotionEvent.ACTION_DOWN:
DatePickerDialogFragment datePickerDialogFragment = new DatePickerDialogFragment();
datePickerDialogFragment.setListener(new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, monthOfYear, dayOfMonth);
birthday.setText(android.text.format.DateFormat.format("yyyy-MM-dd", calendar));
}
});
datePickerDialogFragment.show(getFragmentManager(), DatePickerDialogFragment.TAG);
}
return true;
}
});
<强> DatePickerDialogFragment 强>
public class DatePickerDialogFragment extends DialogFragment {
public static final String TAG = LogUtils.makeLogTag(DatePickerDialogFragment.class);
private DatePickerDialog.OnDateSetListener listener;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(),
listener,
Calendar.getInstance().get(Calendar.YEAR),
Calendar.getInstance().get(Calendar.MONTH),
Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
Calendar today = Calendar.getInstance();
today.add(Calendar.YEAR, -4);
today.add(Calendar.DAY_OF_YEAR, -1);
datePickerDialog.getDatePicker().setMaxDate(today.getTimeInMillis());
return datePickerDialog;
}
public void setListener(DatePickerDialog.OnDateSetListener listener) {
this.listener = listener;
}
}
在此示例中, DatePickerDialog 被包装到DialogFragment,因此它可以在配置更改(例如屏幕旋转等)时继续存在。最小日期也设置为不少于4年 - 但您可以更改它。