如何在特定日期设置限制最大时间选择器?当我在日期选择器中选择星期六时,时间选择器在 12.00 中设置限制最大小时数。但是,如果我在其他日期选择日期选择器,则时间选择器在 15.00(正常(中设置最大小时数限制。我使用这个波纹管代码但失败了,当我选择星期六总是假时。
if( calendarToday.get( Calendar.DAY_OF_WEEK ) == Calendar.SATURDAY){
日期拾取器((
public void datePicker() {
final Calendar calendarMax = Calendar.getInstance();
calendarMax.add(Calendar.DAY_OF_MONTH, 7);
final Calendar calendarToday = Calendar.getInstance();
int year = calendarToday.get(Calendar.YEAR);
int month = calendarToday.get(Calendar.MONTH);
int day = calendarToday.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = DatePickerDialog.newInstance(FormBooking.this, year, month, day);
datePickerDialog.setMinDate(calendarToday);
datePickerDialog.setMaxDate(calendarMax);
//sunday off
List<Calendar> daysList = new LinkedList<>();
Calendar[] daysArray;
Calendar cAux = Calendar.getInstance();
while( calendarToday.getTimeInMillis() <= calendarMax.getTimeInMillis() ){
if( calendarToday.get( Calendar.DAY_OF_WEEK ) != Calendar.SUNDAY){
Calendar c = Calendar.getInstance();
c.setTimeInMillis( calendarToday.getTimeInMillis() );
daysList.add( c );
}
calendarToday.setTimeInMillis( calendarToday.getTimeInMillis() + ( 24 * 60 * 60 * 1000 ) );
}
daysArray = new Calendar[ daysList.size() ];
for( int i = 0; i < daysArray.length; i++ ){
daysArray[i] = daysList.get(i);
}
datePickerDialog.setSelectableDays( daysArray );
datePickerDialog.vibrate(true);
datePickerDialog.show( getFragmentManager(), "DatePickerDialog" );
}
onDataSet((
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
int bulan = (++monthOfYear);
String day_string = String.valueOf(dayOfMonth);
String month_string = String.valueOf(bulan);
if (dayOfMonth < 10) {
day_string = "0" + String.valueOf(dayOfMonth);
}
if (bulan < 10) {
month_string = "0" + String.valueOf(bulan);
}
Calendar selectedDate = Calendar.getInstance();
int mYear = selectedDate.get(Calendar.YEAR);
int mMonth = selectedDate.get(Calendar.MONTH);
int mDay = selectedDate.get(Calendar.DAY_OF_MONTH);
String D = String.valueOf(mDay);
if(String.valueOf(dayOfMonth).equals(D)){ //if choose today
if(selectedDate.get(Calendar.HOUR_OF_DAY)>6 && selectedDate.get(Calendar.HOUR_OF_DAY)<15) {
if(selectedDate.get(Calendar.HOUR_OF_DAY)==14 && selectedDate.get(Calendar.MINUTE)>30) {
input_time.setText("");
} else {
timePicker(true);
}
}else if(selectedDate.get(Calendar.HOUR_OF_DAY)>0 && selectedDate.get(Calendar.HOUR_OF_DAY)<7) {
timePicker(true);
}else{
input_time.setText("");
}
}else{
timePicker(false);
}
input_date.setText("");
input_date.setText(day_string + "." + month_string + "." + year);
}
timePicker((
public void timePicker(boolean isTodayDate){
int minHour = 8;
int maxHour = 15; //max hour, if saturday is 12, but other day, normal maxHour 15
Calendar now = Calendar.getInstance();
TimePickerDialog timepickerdialog = TimePickerDialog.newInstance(
FormBooking.this,
now.get(Calendar.HOUR_OF_DAY),
now.get(Calendar.MINUTE),
true);
if(isTodayDate){ //if choose today
if(now.get(Calendar.HOUR_OF_DAY)>6 && now.get(Calendar.HOUR_OF_DAY)<15){
if(now.get(Calendar.MINUTE)>=0 && now.get(Calendar.MINUTE)<61) {
minHour = now.get(Calendar.HOUR_OF_DAY) + 1;
}
}else if(now.get(Calendar.HOUR_OF_DAY)>0 && now.get(Calendar.HOUR_OF_DAY)<7){
minHour = 8;
}
}
timepickerdialog.setMinTime(minHour, 0, 0);
timepickerdialog.setMaxTime(maxHour, 0, 0);
timepickerdialog.setThemeDark(false);
timepickerdialog.vibrate(false);
timepickerdialog.dismissOnPause(false);
timepickerdialog.show(getFragmentManager(), "Timepickerdialog");
}
您可以使用以下代码检查所选日期是星期六或不
:Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, monthOfYear);// you have increased value of monthOfYear by using ++monthOfYear so you have to use monthOfYear-1
cal.set(Calendar.DAY_OF_MONTH, dayOfMonth);
isSaturday = cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY;
并将这个布尔值传递给你的 timePicker(false, isSaturday( 函数。在时间选择器函数中,您可以设置 maxHours:
int maxHour = 15;
if(isSaturday){
maxHour=12
}