0

Trying to get between two times in Android Studio. In specific, 5PM and 11PM. I can get it to get in between those times, but when I select a time with a minute that isn't 11:00PM or 5:00PM it becomes true. Is there an easier way to do this?

Here's my code so far

Calendar c = Calendar.getInstance();
DateFormat timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT);
TimePickerDialog.OnTimeSetListener t = new TimePickerDialog.OnTimeSetListener() {
    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        c.set(Calendar.HOUR_OF_DAY, hourOfDay);
        c.set(Calendar.MINUTE, minute);
        if(hourOfDay >= 23 && hourOfDay <= 17){
        reservation.setText("The time that your food will arrive will be " + timeFormat.format(c.getTime()) + ".");
        }else{
            reservation.setText("Please select a time between 5PM and 11PM");
        }
        //reservation.setText(hourOfDay + " " + minute);

    }

3 Answers3

0

check for minutes when hour is 23.

   if((hourOfDay >= 17 && hourOfDay <= 22)||(hourOfDay==23 && minute==0)) {
      //within 15:00 to 23:00
   }else {
      //outside of time
   }
Angel Koh
  • 12,479
  • 7
  • 64
  • 91
0

if(hourOfDay >= 23 && hourOfDay <= 17){

How can one hourOfDay be both <= 17 and >= 23 ? try switching && to ||

John3136
  • 28,809
  • 4
  • 51
  • 69
0

You can use the below widget to show TimeDialog with range settings.

package com.mysuger.android.dialogs;

import java.lang.reflect.Field;
import java.text.DateFormat;
import java.util.Calendar;

import android.app.TimePickerDialog;
import android.content.Context;
import android.widget.TimePicker;

/**
 * A time dialog that allows setting a min and max time.
 * 
 */
public class RangeTimePickerDialog extends TimePickerDialog {

private int minHour = -1;
private int minMinute = -1;

private int maxHour = 25;
private int maxMinute = 25;

private int currentHour = 0;
private int currentMinute = 0;

private Calendar calendar = Calendar.getInstance();
private DateFormat dateFormat;


public RangeTimePickerDialog(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) {
    super(context, callBack, hourOfDay, minute, is24HourView);
    currentHour = hourOfDay;
    currentMinute = minute;
    dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);

    try {
        Class<?> superclass = getClass().getSuperclass();
        Field mTimePickerField = superclass.getDeclaredField("mTimePicker");
        mTimePickerField.setAccessible(true);
        TimePicker mTimePicker = (TimePicker) mTimePickerField.get(this);
        mTimePicker.setOnTimeChangedListener(this);
    } catch (NoSuchFieldException e) {
    } catch (IllegalArgumentException e) {
    } catch (IllegalAccessException e) {
    }
}

public void setMin(int hour, int minute) {
    minHour = hour;
    minMinute = minute;
}

public void setMax(int hour, int minute) {
    maxHour = hour;
    maxMinute = minute;
}

@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {

    boolean validTime = true;
    if (hourOfDay < minHour || (hourOfDay == minHour && minute < minMinute)){
        validTime = false;
    }

    if (hourOfDay  > maxHour || (hourOfDay == maxHour && minute > maxMinute)){
        validTime = false;
    }

    if (validTime) {
        currentHour = hourOfDay;
        currentMinute = minute;
    }

    updateTime(currentHour, currentMinute);
    updateDialogTitle(view, currentHour, currentMinute);
}

private void updateDialogTitle(TimePicker timePicker, int hourOfDay, int minute) {
    calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
    calendar.set(Calendar.MINUTE, minute);
    String title = dateFormat.format(calendar.getTime());
    setTitle(title);
}
 }

Call it from the below mentioned way,

    Calendar c = Calendar.getInstance();
    DateFormat timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT);
    TimePickerDialog.OnTimeSetListener t = new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            c.set(Calendar.HOUR_OF_DAY, hourOfDay);
            c.set(Calendar.MINUTE, minute);
            reservation.setText("The time that your food will arrive will be " + timeFormat.format(c.getTime()) + ".");
        }
    RangeTimePickerDialog d = new RangeTimePickerDialog(Activity.this, t, 17, 0, true);
d.setMin(17, 0);
d.setMax(23, 0);
d.show();

For more details, please refer to this

Arsal Imam
  • 2,882
  • 2
  • 24
  • 35