【问题标题】:How to set minimum DatePicker date to current date如何将最小 DatePicker 日期设置为当前日期
【发布时间】:2012-11-19 15:38:47
【问题描述】:

我想将用户可以在 DatePicker 中选择的最短日期设置为当前日期。我试过这个:

DatePicker datePicker = (DatePicker) findViewById(R.id.event_date);
datePicker.setMinDate(System.currentTimeMillis());

这给了我以下例外:

12-01 12:23:31.226: E/AndroidRuntime(10311): Caused by: java.lang.IllegalArgumentException: fromDate: Sat Dec 01 12:23:31 EST 2012 does not precede toDate: Sat Dec 01 12:23:31 EST 2012

我该怎么做?

【问题讨论】:

    标签: android android-datepicker


    【解决方案1】:

    错误提示您现在无法将最短日期设置为准确。尝试减去一秒:

    datePicker.setMinDate(System.currentTimeMillis() - 1000);
    

    从源代码来看,最小日期必须早于当前日期,而不是等于当前日期:

    if (date.before(mMinDate)) {
        throw new IllegalArgumentException("fromDate: " + mMinDate.getTime()
                + " does not precede toDate: " + date.getTime());
    }
    

    所以你只需要从现在减去足够的时间 (System.currentTimeMillis()) 传递 date.before(mMinDate)

    【讨论】:

    • 除了上述解决方案之外,您可以简单地设置该特定日期的最小值,如 here
    • 此解决方案在 5.0.1 (Samsung S4) 上部分适用于 DatePickerDialog。我可以仍然选择当前月份的任何日期。但是,我无法选择上个月的日期。
    • 也可以使用:setMinDate(Calendar.getInstance().getTimeInMillis());
    • @ShubhamA 你解决了这个问题吗,因为它也发生在我身上。我可以选择当月的任何日期。
    • - 1000 在某些情况下不适用于 Kotlin :(
    【解决方案2】:

    如果您不想使用自定义对话框。使用这个单行代码:

    datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()); 
    

    【讨论】:

    • 由于某种原因,这不适用于 5.0 以下的设备。标记的答案适用于所有情况。
    • 这将导致与所描述的 OP 相同的异常(至少在 Android API 16 和 18 上),它只是选择日期选择器的不同方式。
    【解决方案3】:

    检查Android DatePickerDialog设置最小最大日期代码。

    这里是examples

    final Calendar c = Calendar.getInstance();  
        int year = c.get(Calendar.YEAR);  
        int month = c.get(Calendar.MONTH);  
        int day = c.get(Calendar.DAY_OF_MONTH);  
    DatePickerDialog dpd = new DatePickerDialog(getActivity(),AlertDialog.THEME_TRADITIONAL,this,year, month, day);  
    
        //Get the DatePicker instance from DatePickerDialog  
        DatePicker dp = dpd.getDatePicker();  
        //Set the DatePicker minimum date selection to current date  
        dp.setMinDate(c.getTimeInMillis());//get the current day  
        //dp.setMinDate(System.currentTimeMillis() - 1000);// Alternate way to get the current day  
    
        //Add 6 days with current date  
        c.add(Calendar.DAY_OF_MONTH,6);  
    
        //Set the maximum date to select from DatePickerDialog  
        dp.setMaxDate(c.getTimeInMillis());  
        //Now DatePickerDialog have 7 days range to get selection any one from those dates 
    

    【讨论】:

    • 请避免仅链接的答案
    【解决方案4】:

    这对我来说非常有效。简单又漂亮。

    DatePickerDialog dialog = new DatePickerDialog(this, this,
                  Calendar.YEAR,Calendar.MONTH,
                    Calendar.DAY_OF_MONTH);
    
            dialog.getDatePicker().setMinDate(Calendar.getInstance().getTimeInMillis());
            dialog.show();
    

    【讨论】:

      【解决方案5】:

      将此行添加到您的 DatePicker Fragment 会将最短日期设置为当前日期并禁用前几个月。

      datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis());
      

      【讨论】:

        【解决方案6】:

        这可以帮助你。

        Calendar cal=Calendar.getInstance();
        
        int year=cal.get(Calendar.YEAR);
        int month=cal.get(Calendar.MONTH);
        int day=cal.get(Calendar.DAY_OF_MONTH);
        int hour=cal.get(Calendar.HOUR_OF_DAY);
        int min=cal.get(Calendar.MINUTE);
        
        datePicker.updateDate(year, month, day);
        
        timePicker.setCurrentHour(hour);
        timePicker.setCurrentMinute(min);
        

        【讨论】:

        • 我不想设置默认日期我想设置用户可以选择的最小日期。
        • 糟糕,我会检查的:)
        【解决方案7】:

        试试这个

        datePicker.setMinDate(new GregorianCalendar.getTimeInMillis());
        

        【讨论】:

        • 一些评论将有助于这个答案
        【解决方案8】:
        datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()); 
        

        DatePickerDialog dialog = new DatePickerDialog(this, this,
                  Calendar.YEAR,Calendar.MONTH,
                    Calendar.DAY_OF_MONTH);
        
            dialog.getDatePicker().setMinDate(Calendar.getInstance().getTimeInMillis());
            dialog.show();
        

        【讨论】:

          【解决方案9】:
          datePicker.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
          

          最小的日期不能是瞬间

          【讨论】:

            【解决方案10】:

            自定义日期

            Calendar c = Calendar.getInstance();
            c.set(2017, 0, 1);//Year,Month -1,Day
            your_date_picker.setMaxDate(c.getTimeInMillis());
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-10-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-09-21
              相关资源
              最近更新 更多