【问题标题】:Datepicker dialog must not select past date日期选择器对话框不能选择过去的日期
【发布时间】:2013-06-17 07:15:21
【问题描述】:

我在我的应用程序中使用日期选择器对话框。当用户从对话框中选择任何日期时,我不想选择传递的日期。我的代码在这里。

private DatePickerDialog.OnDateSetListener mdateSetListener = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int yr, int monthOfYear,
            int dayOfMonth) {
        year = yr;
        month = monthOfYear;
        day = dayOfMonth;
        updateDate();
    }
};

更新日期将所选日期设置为 EditText。是否有任何图书馆方法可以防止选择过去的日期?

提前致谢

【问题讨论】:

  • 你总是可以在你的按钮上放一个 if,强制用户重新输入一个有效值
  • @wazaminator 但是如何检查有效日期。
  • view.setMinDate(System.currentTimeMillis());在 onDateSet(params) 中试试这个

标签: java android android-layout datepicker


【解决方案1】:

在更新方法中,您的条件将是 .Date 类具有之前、等于和之后的方法。使用它们。

if(userdate.before(today) || userdate.equals(today)){
   //past date found
}

【讨论】:

  • 致力于您的概念。如果工作,然后等待接受。谢谢:)
  • @VarunVishnoi:Badshah 给出了解决您问题的正确方法。我在这里放了你可以使用的工作代码。
【解决方案2】:

您可以使用:getDatePicker().setMaxDate()。覆盖 Dialog 的 onCreate() 并在那里应用限制。

【讨论】:

    【解决方案3】:

    如果使用 API 11 或更高版本,您可以使用DatePicker.setMinDate()

    查看http://developer.android.com/reference/android/widget/DatePicker.html#setMinDate(long)了解更多信息。

    另请参阅setMinDate() for DatePicker doesn't work 了解如何使用它。

    【讨论】:

      【解决方案4】:

      如果您的应用程序需要在 API LEVEL 8+ 上运行,请使用以下方法。将相关代码放入youtonDateSet方法中。

      @Override
          public void onDateSet(DatePicker view, int year, int monthOfYear,
                  int dayOfMonth) {
      String selected_date = dayOf + "-" + monthOf + "-" + year;
      
                  Log.i(TAG, "Selected Date" + selected_date);
                  SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
                  Date strDate = null;
                  try {
                      strDate = sdf.parse(selected_date);
                  } catch (ParseException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
      
                  Calendar c = Calendar.getInstance();
                  System.out.println("Current time => " + c.getTime());
      
                  Date current_date = null;
                  String formattedDate = sdf.format(c.getTime());
                  try {
                      current_date = sdf.parse(formattedDate);
                  } catch (ParseException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
      
      
                  if (current_date.after(strDate)) {
                      Toast.makeText(getApplicationContext(),
                              "Please choose future date", 1).show();
                  } else {
      
                      mYear = String.valueOf(year);
                      mMonth = String.valueOf(monthOfYear);
                      mDay = String.valueOf(dayOfMonth);
                      updateStartDate();
      
                  }
             }
      

      如果您的应用程序需要在 API LEVEL 11+ 上运行,请使用DatePicker.setMinDate(long),您可以找到更多信息HERE

      【讨论】:

      • not working bcz Selected Date17-5-2013 and Current time => Mon Jun 17 13:21:54 IST 2013... 这些无法比较。
      • @VarunVishnoi :您似乎没有尝试过我的代码。在比较之前,我已将当前日期转换为与所选日期相同的格式。您应该再次查看代码并尝试在您的项目中运行一次。
      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 2014-03-23
      • 2023-03-03
      • 2018-09-28
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多