【问题标题】:Using EditText with date picker dialog on Android在 Android 上使用带有日期选择器对话框的 EditText
【发布时间】:2018-09-03 13:19:07
【问题描述】:

我想在 Android 中的日期选择器对话框中设置以下约束:

  1. 如果所选日期小于当前日期,则抛出错误。并且
  2. 所选日期与当前日期的间隔不得超过 14 天。

我查看了herehere,但对我不起作用。

请参阅下面的代码:

 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;
    }
}

第一个约束似乎只适用于年份而不是日子,例如仅当我选择 2019 或 2017 时才有效。

【问题讨论】:

  • 您是否尝试过使用setMinDatesetMaxDate? (见here

标签: android datepickerdialog


【解决方案1】:

尝试将"dd - mm - yyyy"改为"dd - MM - yyyy"

mm - 分钟

MM - 月

【讨论】:

  • 这修复了第一个约束。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
相关资源
最近更新 更多