Как установить минимальное время для системного текущего времени из timepickerdialog - PullRequest
0 голосов
/ 25 марта 2020

Я использую диалоговое окно выбора времени, чтобы выбрать время, но в последнее время я заметил, что когда пользователь выбирает время, он позволяет пользователю выбрать время, которое уже прошло. Пример: если текущая дата 25-03-2020, а время 17:00, но средство выбора времени позволяет выбрать время ниже 17:00.

1002 * Так как я могу предупредить пользователя, чтобы он не выбирал прошедшее время текущей даты .

Ответы [ 3 ]

1 голос
/ 25 марта 2020

попробуйте

  fun validateStartDate(y: Int, m: Int, d: Int): Boolean {
        val selectedDate = GregorianCalendar(y, m - 1, d).time
        val currentTime = Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000)
        val c = Calendar.getInstance()
        Log.d("d", currentTime.toString())
        c.time = currentTime
        c.add(Calendar.YEAR, 1)
        val newDate = c.time
        Log.d("d", selectedDate.toString())
        val check = selectedDate.before(currentTime) && selectedDate.before(newDate)
        Log.d("D", check.toString())
        return selectedDate.before(currentTime) && selectedDate.before(newDate)
    }

Редактировать с Java

  public boolean validateWarrantyDate(int y, int m, int d) {
        Date selectedDate = new GregorianCalendar(y
                , m - 1, d).getTime();
        Date currentTime = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000);
        Calendar c = Calendar.getInstance();
        Log.d("d", String.valueOf(currentTime));
        c.setTime(currentTime);
        c.add(Calendar.YEAR, 1);
        Date newDate = c.getTime();
        Log.d("d", String.valueOf(newDate));
        Log.d("d", String.valueOf(selectedDate));
        boolean check = selectedDate.after(currentTime) && selectedDate.before(newDate);
        Log.d("D", String.valueOf(check));
        return selectedDate.after(currentTime) && selectedDate.before(newDate);
    }

Надеюсь, это поможет вам.

0 голосов
/ 26 марта 2020

Спасибо всем за помощь. Но каким-то образом я решил проблему с помощью следующего подхода, так что я думаю, что это поможет будущим исследователям найти решение.

Сначала, когда пользователь выбирает дату из средства выбора даты и устанавливает дату и выбирает средство выбора времени, затем он генерирует дата из простого формата даты и совпадает, если обе даты совпадают. если да, то начинается проверка времени с другим форматом даты.

вот его код. Я включил все из даты выбора.

 (Button_name_for_date_picker).setOnClickListener(view -> {
            Calendar calendar1 = Calendar.getInstance();
            int year = calendar1.get(Calendar.YEAR);
            int month = calendar1.get(Calendar.MONTH);
            int day = calendar1.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog dialog = new DatePickerDialog(OrderConfirmationActivity.this,
                    dateSetListener, year, month, day);
            dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
            dialog.getDatePicker().setMaxDate(System.currentTimeMillis() -1000 + (1000*60*60*24*7)); // This allows user to select a date range between a week
            dialog.show();
        });
        dateSetListener = (view, year, month, dayOfMonth) -> {
            month = month + 1;
            if (month < 10){
                String single_month = "0" + month;
                (String_name) = dayOfMonth + "/" + single_month + "/" + year;
                (Button_name).setText(AppointmentDate);
                Appoint_date.setTextColor(getResources().getColor(android.R.color.holo_green_light, getTheme()));
            }else{
                AppointmentDate = dayOfMonth + "/" + month + "/" + year;
                Appoint_date.setText(AppointmentDate);
                Appoint_date.setTextColor(getResources().getColor(android.R.color.holo_green_light, getTheme()));
            }

        };


        //This Generates AppointmentTime
        Appoint_time.setOnClickListener(view -> {
            Calendar calendar12 = Calendar.getInstance();
            final int hour = calendar12.get(Calendar.HOUR_OF_DAY);
            int minute = calendar12.get(Calendar.MINUTE);
            TimePickerDialog timePickerDialog = new TimePickerDialog(OrderConfirmationActivity.this, (timePicker, selected_hour, selected_minute) -> {
                SimpleDateFormat current_date = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH);
                String check = current_date.format(new Date());
                if (AppointmentDate.equals(check)){
                    SimpleDateFormat current_time = new SimpleDateFormat("HH", Locale.getDefault());
                    int check_hour = Integer.parseInt(current_time.format(new Date()));
                    String v = String.valueOf(future_time);
                    Toast.makeText(this, v, Toast.LENGTH_SHORT).show();
                    if (selected_hour < check_hour) {
                        future_time = 1;
                        String v1 = String.valueOf(future_time);
                        Toast.makeText(this, v1, Toast.LENGTH_SHORT).show();
                    }
                }

                if (selected_hour < 7){
                    time_check = 1;
                }else if (selected_hour >= 19){
                    time_check = 1;
                }

                if (selected_hour > 12) {
                    AppointmentTime = (selected_hour - 12) + ":" + selected_minute + " " + "PM";
                    Appoint_time.setText(AppointmentTime);
                } else if (selected_hour == 12) {
                    AppointmentTime = "12" + ":" + selected_minute + " " + "PM";
                    Appoint_time.setText(AppointmentTime);
                } else {
                    if (selected_hour != 0) {
                        AppointmentTime = selected_hour + ":" + selected_minute + " " + "AM";
                        Appoint_time.setText(AppointmentTime);
                    } else {
                        AppointmentTime = "12" + ":" + selected_minute + " " + "AM";
                        Appoint_time.setText(AppointmentTime);
                    }

                }
            }, hour, minute, false);
            timePickerDialog.show();
        });
0 голосов
/ 25 марта 2020

Вы можете создать пользовательский TimePicker, который позволяет установить минимальное время, вы можете попробовать это решение

public class CustomTimePicker extends TimePickerDialog {
private int mMinHour = -1;
private int mMinMinute = -1;
private int mMaxHour = 100;
private int mMaxMinute = 100;
private int mCurrentHour;
private int mCurrentMinute;

public CustomTimePicker(Context context, OnTimeSetListener callBack, int hourOfDay,
                        int minute, boolean is24HourView) {
    super(context, callBack, hourOfDay, minute, is24HourView);
    mCurrentHour = hourOfDay;
    mCurrentMinute = minute;
    // Somehow the onTimeChangedListener is not set by TimePickerDialog
    // in some Android Versions, so, Adding the listener using
    // reflections
    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) {
    mMinHour = hour;
    mMinMinute = minute;
}

public void setMax(int hour, int minute) {
    mMaxHour = hour;
    mMaxMinute = minute;
}

@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
    super.onTimeChanged(view, hourOfDay, minute);
    boolean validTime;
    if (((hourOfDay < mMinHour) || (hourOfDay == mMinHour && minute < mMinMinute))
            || ((hourOfDay > mMaxHour) || (hourOfDay == mMaxHour && minute > mMaxMinute))) {
        validTime = false;
    } else {
        validTime = true;
    }
    if (validTime) {
        mCurrentHour = hourOfDay;
        mCurrentMinute = minute;
    } else {
        updateTime(mCurrentHour, mCurrentMinute);
    }
}}

Теперь используйте CustomTimePicker как:

CustomTimePicker customTimePicker = new CustomTimePicker(AddExtraForecast.this, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute)
                    {
                        int selected_hour = hourOfDay;
                        int selected_minutes = minute;
                        String min = "", hours = "";
                        if (selected_hour < 10)
                            hours = "0" + selected_hour;
                        else
                            hours = String.valueOf(selected_hour);
                        if (selected_minutes < 10)
                            min = "0" + selected_minutes;
                        else
                            min = String.valueOf(selected_minutes);

                        // Append in a StringBuilder
                        String aTime = new StringBuilder().append(hours).append(":")
                                .append(min).append(":").append("00").toString();


                }, new Time(System.currentTimeMillis()).getHours(), new Time(System.currentTimeMillis()).getMinutes(), true);
                customTimePicker.updateTime(// hours_in_integer, mins_in_integer));
                customTimePicker.setMin(Integer.parseInt(// hours_in_integer, mins_in_integer));
                customTimePicker.show();
...