如何设置最大日期在数据采集器对话框在安卓?

在我的应用程序使用日期选择器设置日期。我想设置日期选择器的最大日期为今天的日期根据系统的日期。我不知道如何设置日期选择器的最大日期为今天的日期。谁能帮我解决这个问题。

我的约会选择代码是:

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;
}
135680 次浏览
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
}
};

试试这个,应该可以,谢谢

您可以尝试替换这一行:

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

通过这些:

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;

使用 setMaxDate()

例如,将 return new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay)语句替换为以下内容:

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

获取今天的日期(和时间) ,并应用他们作为最大日期。

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

我们也可以这样做(检查这个 堆栈溢出答案中的 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

您可以创建 自定义日期选择器,这是所有 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);
}
}

设定最大日期

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

我通过跟踪解决了这个问题

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());

希望能对你有所帮助

DatePicker dp = (DatePicker) findViewById(R.id.datePicker1);


dp.setMaxDate(new Date().getTime());

看看我的自定义日期选择器对话框

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


}


}

用法

将 EightFoldsDatePickerDialog.java 复制到项目中

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();

结果

试试这个

我已经尝试了太多的解决方案,但是没有一个是有效的,在浪费了我的半天之后,我终于找到了一个解决方案。

这段代码只是向您显示一个 DatePickerDialog,其中包含最小和最大日期、月份和年份,只需修改即可。

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();

禁用以前和将来的日历

enter image description here

直接在主方法中使用此代码,希望对您有所帮助..。

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

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());


}
      Calendar cal = Calendar.getInstance();
datePickerDialog.getDatePicker().setMinDate(cal.getTimeInMillis());
//To set make max 7days date selection on current year and month
datePickerDialog.getDatePicker().setMaxDate((cal.getTimeInMillis())+(1000*60*60*24*6));


datePickerDialog.setTitle("Select Date");
datePickerDialog.show();

下面是一个 Kotlin 扩展函数:

fun EditText.transformIntoDatePicker(context: Context, format: String, maxDate: Date? = null) {
isFocusableInTouchMode = false
isClickable = true
isFocusable = false


val myCalendar = Calendar.getInstance()
val datePickerOnDataSetListener =
DatePickerDialog.OnDateSetListener { _, year, monthOfYear, dayOfMonth ->
myCalendar.set(Calendar.YEAR, year)
myCalendar.set(Calendar.MONTH, monthOfYear)
myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)
val sdf = SimpleDateFormat(format, Locale.UK)
setText(sdf.format(myCalendar.time))
}


setOnClickListener {
DatePickerDialog(
context, datePickerOnDataSetListener, myCalendar
.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)
).run {
maxDate?.time?.also { datePicker.maxDate = it }
show()
}
}
}

用法:

活动内容:

editText.transformIntoDatePicker(this, "MM/dd/yyyy")
editText.transformIntoDatePicker(this, "MM/dd/yyyy", Date())

片段:

editText.transformIntoDatePicker(requireContext(), "MM/dd/yyyy")
editText.transformIntoDatePicker(requireContext(), "MM/dd/yyyy", Date())