¿Cómo se establece la fecha máxima en el diálogo datepicker en android?

En mi aplicación estoy usando el selector de fecha para establecer la fecha. Quiero establecer la fecha máxima del selector de fecha es la fecha actual de acuerdo con la fecha del sistema. No sé cómo configurar la fecha máxima del selector de fecha como fecha de hoy. ¿Alguien puede ayudarme? para resolver este problema.

La encoding de mi selector de fecha es:

private int pYear; private int pMonth; private int pDay; static final int DATE_DIALOG_ID = 0; final Calendar c = Calendar.getInstance(); pYear = c.get(Calendar.YEAR); pMonth = c.get(Calendar.MONTH); pDay = c.get(Calendar.DAY_OF_MONTH); // Date picker public Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: DatePickerDialog.OnDateSetListener pDateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { pYear = year; pMonth = monthOfYear; pDay = dayOfMonth; e_dob.setText(new StringBuilder() // to set date in editext .append(pDay).append("/").append(pMonth + 1) .append("/").append(pYear).append(" ")); } }; return new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay); } return null; } 

Use setMaxDate() .

Por ejemplo, reemplace return new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay) statement con algo como esto:

  DatePickerDialog dialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay); dialog.getDatePicker().setMaxDate(new Date().getTime()); return dialog; 

Obtenga la fecha (y hora) de hoy y aplíquela como fecha máxima.

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

TAMBIÉN PODEMOS HACER ESTO (verifique esta respuesta Stackoverflow para el método System.currentTimeMillis () vs Calendar)

 long now = System.currentTimeMillis() - 1000; dp_time.setMinDate(now); dp_time.setMaxDate(now+(1000*60*60*24*7)); //After 7 Days from Now 

Puedes intentar reemplazar esta línea:

 return new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay); 

Por esos:

 DatePickerDialog dpDialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay); DatePicker datePicker = dpDialog.getDatePicker(); Calendar calendar = Calendar.getInstance();//get the current day datePicker.setMaxDate(calendar.getTimeInMillis());//set the current day as the max date return dpDialog; 
 private int pYear; private int pMonth; private int pDay; static final int DATE_DIALOG_ID = 0; /**inside oncreate */ final Calendar c = Calendar.getInstance(); pYear= c.get(Calendar.YEAR); pMonth = c.get(Calendar.MONTH); pDay = c.get(Calendar.DAY_OF_MONTH); @Override protected Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: return new DatePickerDialog(this, mDateSetListener, pYear, pMonth-1, pDay); } return null; } protected void onPrepareDialog(int id, Dialog dialog) { switch (id) { case DATE_DIALOG_ID: ((DatePickerDialog) dialog).updateDate(pYear, pMonth-1, pDay); break; } } private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // write your code here to get the selected Date } }; 

intenta esto debería funcionar Gracias

Prueba esto

He intentado con demasiadas soluciones, pero ninguna de ellas funcionaba. Después de perder mi medio día, finalmente hice una solución.

Este código simplemente le muestra un DatePickerDialog con la fecha mínima y máxima, mes y año, lo que usted quiera simplemente modifíquelo.

 final Calendar calendar = Calendar.getInstance(); DatePickerDialog dialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker arg0, int year, int month, int day_of_month) { calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, (month+1)); calendar.set(Calendar.DAY_OF_MONTH, day_of_month); String myFormat = "dd/MM/yyyy"; SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.getDefault()); your_edittext.setText(sdf.format(calendar.getTime())); } },calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); dialog.getDatePicker().setMinDate(calendar.getTimeInMillis());// TODO: used to hide previous date,month and year calendar.add(Calendar.YEAR, 0); dialog.getDatePicker().setMaxDate(calendar.getTimeInMillis());// TODO: used to hide future date,month and year dialog.show(); 

Salida: – Deshabilita el calendario anterior y futuro

enter image description here

Echa un vistazo a mi diálogo personalizado datepicker

https://github.com/Redman1037/EightFoldsDatePickerDialog

 import android.app.DatePickerDialog; import android.content.Context; import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; /** * Created by Manohar on 14/08/2017. */ public class EightFoldsDatePickerDialog extends DatePickerDialog { private DatePickerDialog datePickerDialog; private SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy"); @RequiresApi(api = Build.VERSION_CODES.N) public EightFoldsDatePickerDialog(@NonNull Context context) { super(context); datePickerDialog = new DatePickerDialog(context); } @RequiresApi(api = Build.VERSION_CODES.N) public EightFoldsDatePickerDialog(@NonNull Context context, int themeResId) { super(context, themeResId); datePickerDialog = new DatePickerDialog(context, themeResId); } public EightFoldsDatePickerDialog(@NonNull Context context, @Nullable OnDateSetListener listener, int year, int month, int dayOfMonth) { super(context, listener, year, month, dayOfMonth); datePickerDialog = new DatePickerDialog(context, listener, year, month, dayOfMonth); } public EightFoldsDatePickerDialog(@NonNull Context context, int themeResId, @Nullable OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth) { super(context, themeResId, listener, year, monthOfYear, dayOfMonth); datePickerDialog = new DatePickerDialog(context, themeResId, listener, year, monthOfYear, dayOfMonth); } public void show() { datePickerDialog.show(); } public void setMinDate(int year, int month, int day) { String minDate = "" + day + "-" + getmonth(month) + "-" + year; try { datePickerDialog.getDatePicker().setMinDate(dateFormat.parse(minDate).getTime()); } catch (ParseException e) { e.printStackTrace(); } } public void setMaxDate(int year, int month, int day) { String maxDate = "" + day + "-" + getmonth(month) + "-" + year; try { datePickerDialog.getDatePicker().setMaxDate(dateFormat.parse(maxDate).getTime()); } catch (ParseException e) { e.printStackTrace(); } } public void setTodayAsMaxDate() { datePickerDialog.getDatePicker().setMaxDate(Calendar.getInstance().getTime().getTime()); } public void setTodayAsMinDate() { datePickerDialog.getDatePicker().setMinDate(Calendar.getInstance().getTime().getTime()); } private String getmonth(int month) { switch (month) { case 1: return "January"; case 2: return "February"; case 3: return "March"; case 4: return "April"; case 5: return "May"; case 6: return "June"; case 7: return "July"; case 8: return "August"; case 9: return "September"; case 10: return "October"; case 11: return "November"; case 12: return "December"; } return "January"; } } 

Uso

Copie EightFoldsDatePickerDialog.java en su proyecto

 EightFoldsDatePickerDialog datePickerDialog=new EightFoldsDatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { //Do something with date Toast.makeText(this, "Year "+year+" month "+month+" day "+dayOfMonth, Toast.LENGTH_SHORT).show(); } },year,month,day); // give any year , month , day values, this will be opened by default in dialog datePickerDialog.setMinDate(2017,8,7); //arguments are year , month , date (use for setting custom min date) datePickerDialog.setMaxDate(2017,8,25); //arguments are year , month , date (use for setting custom max date) // datePickerDialog.setTodayAsMinDate(); // sets today's date as min date // datePickerDialog.setTodayAsMaxDate(); // sets today's date as max date datePickerDialog.show(); 

Resultado

utiliza este código directamente en el método principal espero que te ayude …

 @RequiresApi(api = Build.VERSION_CODES.N) public DatePickerDialog datePickerDialog_db() { DatePickerDialog pickerDialog = new DatePickerDialog(getApplicationContext(),your view, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)); pickerDialog.getDatePicker().setMaxDate(Calendar.getInstance().getTimeInMillis()); pickerDialog.show(); return null; } 

Puede crear selector de fecha personalizado , que funciona para todos los niveles de API.

 public class CustomDatePickerDialog extends DatePickerDialog { int maxYear; int maxMonth; int maxDay; public CustomDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { super(context, callBack, year, monthOfYear, dayOfMonth); } public void setMaxDate(long maxDate) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getDatePicker().setMaxDate(System.currentTimeMillis()); } else { final Calendar c = Calendar.getInstance(); c.setTimeInMillis(maxDate); maxYear = c.get(Calendar.YEAR); maxMonth = c.get(Calendar.MONTH); maxDay = c.get(Calendar.DAY_OF_MONTH); } } @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { super.onDateChanged(view, year, monthOfYear, dayOfMonth); } else { if (year > maxYear) view.updateDate(maxYear, maxMonth, maxDay); if (monthOfYear > maxMonth && year == maxYear) view.updateDate(maxYear, maxMonth, maxDay); if (dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth) view.updateDate(maxYear, maxMonth, maxDay); } } 

establecer la fecha máxima

 final CustomDatePickerDialog pickerDialog = new CustomDatePickerDialog(getActivity(), myDateListener, year, month, day); pickerDialog.setMaxDate(System.currentTimeMillis()); pickerDialog.show(); 

Lo resolví siguiendo

 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 = new DatePickerDialog(getActivity(), this, year, month, day); datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis()); 

Espero que te ayude

 DatePicker dp = (DatePicker) findViewById(R.id.datePicker1); dp.setMaxDate(new Date().getTime()); 

private void selectDOB () {

  final Calendar calendar = Calendar.getInstance(); mYear = calendar.get(Calendar.YEAR); mDay = calendar.get(Calendar.DATE); mMonth = calendar.get(Calendar.MONTH); DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @SuppressLint("LongLogTag") @Override public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { strDateOfBirth = (month + 1) + "-" + dayOfMonth + "-" + year; //********************** check and set date with append 0 at starting*************************** if (dayOfMonth < 10) { strNewDay = "0" + dayOfMonth; } else { strNewDay = dayOfMonth + ""; } if (month + 1 < 10) { strNewMonth = "0" + (month + 1); } else { strNewMonth = (month + 1) + ""; } Log.e("strnewDay *****************", strNewDay + ""); Log.e("strNewMonth *****************", strNewMonth + ""); // etDateOfBirth.setText(dayOfMonth + " / " + (month + 1) + " / " + year); etDateOfBirth.setText(strNewDay + " / " + strNewMonth + " / " + year); Log.e("strDateOfBirth *******************", strDateOfBirth + ""); } }, mYear, mMonth, mDay); datePickerDialog.show(); //*************** input date of birth must be greater than or equal to 18 ************************************ Calendar maxDate = Calendar.getInstance(); maxDate.set(Calendar.DAY_OF_MONTH, mDay); maxDate.set(Calendar.MONTH, mMonth); maxDate.set(Calendar.YEAR, mYear - 18); datePickerDialog.getDatePicker().setMaxDate(maxDate.getTimeInMillis()); //*************** input date of birth must be less than today date ************************************ // datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis()); }