在 Android 上将 EditText 与日期选择器对话框一起使用
Using EditText with date picker dialog on Android
我想在 Android 中的日期选择器对话框中设置以下约束:
- 如果 selected 日期小于当前日期,则抛出错误。并且
- 所选日期与当前日期的间隔不得超过 14 天。
我看了 here and here 但没有用。
查看下面我的代码:
private void pickUpDay() {
final Calendar calendar = Calendar.getInstance();
int mYear = calendar.get(Calendar.YEAR);
int mMonth = calendar.get(Calendar.MONTH);
int mDay = calendar.get(Calendar.DAY_OF_MONTH);
final DatePickerDialog datePickerDialog = new DatePickerDialog(this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
String stringDay = (dayOfMonth + " - " + (month + 1) + " - " + year);
SimpleDateFormat format = new SimpleDateFormat("dd - mm - yyyy", Locale.US);
try {
Date selectedDate = format.parse(stringDay);
Date currentDate = new Date(System.currentTimeMillis());
int dateDifference =
(int) getDateDiff(new SimpleDateFormat("dd - mm - yyyy", Locale.US),
currentDate.toString(), selectedDate.toString());
if (currentDate.compareTo(selectedDate) < 0 && dateDifference < 14) {
mBookDate.setText(stringDay);
} else {
Toast.makeText(BookDetails.this, "The selected date" +
" is not valid!",
Toast.LENGTH_SHORT).show();
}
System.out.println("days difference: " + dateDifference);
System.out.println("Get current Date: " + currentDate);
System.out.println("Get picker Date: " + selectedDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
}
//get days difference
public static long getDateDiff(SimpleDateFormat format, String currentDate, String newDate) {
try {
return TimeUnit.DAYS.convert(format.parse(newDate).getTime() -
format.parse(currentDate).getTime(), TimeUnit.MILLISECONDS);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
第一个约束条件似乎只适用于年份而不适用于日期,例如它仅在我 select 2019 或 2017 时有效。
尝试将 "dd - mm - yyyy"
更改为 "dd - MM - yyyy"
毫米-分钟
MM - 月
我想在 Android 中的日期选择器对话框中设置以下约束:
- 如果 selected 日期小于当前日期,则抛出错误。并且
- 所选日期与当前日期的间隔不得超过 14 天。
我看了 here and here 但没有用。
查看下面我的代码:
private void pickUpDay() {
final Calendar calendar = Calendar.getInstance();
int mYear = calendar.get(Calendar.YEAR);
int mMonth = calendar.get(Calendar.MONTH);
int mDay = calendar.get(Calendar.DAY_OF_MONTH);
final DatePickerDialog datePickerDialog = new DatePickerDialog(this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
String stringDay = (dayOfMonth + " - " + (month + 1) + " - " + year);
SimpleDateFormat format = new SimpleDateFormat("dd - mm - yyyy", Locale.US);
try {
Date selectedDate = format.parse(stringDay);
Date currentDate = new Date(System.currentTimeMillis());
int dateDifference =
(int) getDateDiff(new SimpleDateFormat("dd - mm - yyyy", Locale.US),
currentDate.toString(), selectedDate.toString());
if (currentDate.compareTo(selectedDate) < 0 && dateDifference < 14) {
mBookDate.setText(stringDay);
} else {
Toast.makeText(BookDetails.this, "The selected date" +
" is not valid!",
Toast.LENGTH_SHORT).show();
}
System.out.println("days difference: " + dateDifference);
System.out.println("Get current Date: " + currentDate);
System.out.println("Get picker Date: " + selectedDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
}
//get days difference
public static long getDateDiff(SimpleDateFormat format, String currentDate, String newDate) {
try {
return TimeUnit.DAYS.convert(format.parse(newDate).getTime() -
format.parse(currentDate).getTime(), TimeUnit.MILLISECONDS);
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
第一个约束条件似乎只适用于年份而不适用于日期,例如它仅在我 select 2019 或 2017 时有效。
尝试将 "dd - mm - yyyy"
更改为 "dd - MM - yyyy"
毫米-分钟
MM - 月