android timePickerDialog 的时间验证

Time validation for android timePickerDialog

我想禁用以下代码的未来计时。如果用户选择未来的时间,我想在这里发出通知。但是,这里的日期验证工作正常。只是时间选择的问题。

if (fired) {
            fired = false;
            if (date.after(currentDate)) {
                new DoToast(mContext, getResources().getString(
                        R.string.future_date));

            } else {
                TimePickerDialog mTimePicker = new TimePickerDialog(mContext,
                        new TimePickerDialog.OnTimeSetListener() {
                            @Override
                            public void onTimeSet(TimePicker timePicker,
                                    int selectedHour, int selectedMinute) {

                                String Am_Pm = "";

                                hour = selectedHour;
                                minute = selectedMinute;

                                Calendar datetime = Calendar.getInstance();
                                datetime.set(Calendar.HOUR_OF_DAY, hour);
                                datetime.set(Calendar.MINUTE, minute);

                                if (datetime.get(Calendar.AM_PM) == Calendar.AM)
                                    Am_Pm = "AM";
                                else if (datetime.get(Calendar.AM_PM) == Calendar.PM)
                                    Am_Pm = "PM";
                                String minuteText = "" + minute;
                                if (minuteText.length() < 2) {
                                    minuteText = "0" + minuteText;
                                }
                                if (hour > 12)
                                    hour = hour - 12;

                                date_time.setText(new StringBuilder()
                                        .append(month + 1).append("-")
                                        .append(day).append("-").append(year)
                                        .append(" ")
                                        + "  "
                                        + hour
                                        + ": "
                                        + minuteText
                                        + " "
                                        + Am_Pm);
                            }
                        }, hour, minute, false);
                mTimePicker.setTitle("Select Time");
                hour = c.get(Calendar.HOUR_OF_DAY);
                minute = c.get(Calendar.MINUTE);
                mTimePicker.updateTime(hour, minute);

                mTimePicker.show();
            }
        }

您的验证需要从 onTimeSet 内部触发,否则将在检查之前设置。

  • 当您从侦听器获得回调时,检查临时 Callendar 对象的有效性。
  • 使用 SimpleDateFormat 来格式化您正在构建的要显示的字符串。

可以在 activity 中的任何地方调用以下代码,它应该可以工作。我也将您的 date_time 字符串方法更新为更优雅的方法。我假设 date_timec 已建立并可访问。

TimePickerDialog mTimePicker = new TimePickerDialog(this,
        new TimePickerDialog.OnTimeSetListener() {
            public void onTimeSet(TimePicker timePicker,int selectedHour,int selectedMinute) {
                Calendar temp=Calendar.getInstance();
                temp.set(Calendar.HOUR_OF_DAY,selectedHour);
                temp.set(Calendar.MINUTE,selectedMinute);

                if(temp.after(GregorianCalendar.getInstance())){
                    Toast.makeText(mContext.this, "Cannot select a future time", Toast.LENGTH_SHORT).show();
                } else {
                    Calendar datetime=Calendar.getInstance();
                    datetime.set(Calendar.HOUR_OF_DAY,selectedHour);
                    datetime.set(Calendar.MINUTE,selectedMinute);
                    SimpleDateFormat mSDF=new SimpleDateFormat("MM-dd-yyyy hh: mm a");
                    date_time.setText(mSDF.format(datetime.getTime()));  // make sure this is accessible
                }
            }
        }, sCal.get(Calendar.HOUR_OF_DAY), sCal.get(Calendar.MINUTE), false);
// Ensure that c is established
mTimePicker.updateTime(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE));
mTimePicker.show();
    Try simple piece of code using For 24 hour time
    StartTime = "10:00";
    EndTime = "13:00";
    here starthour=10 and end hour=13 




  if(TextUtils.isEmpty(txtDate.getText().toString())||TextUtils.isEmpty(txtDate1.getText().toString())||TextUtils.isEmpty(txtTime.getText().toString())||TextUtils.isEmpty(txtTime1.getText().toString()))
    {
        Toast.makeText(getApplicationContext(), "Date/Time fields cannot be blank", Toast.LENGTH_SHORT).show();
    }
    else {
        if (starthour > endhour) {
            Toast.makeText(getApplicationContext(), "Start Time Should Be Less Than End Time", Toast.LENGTH_SHORT).show();
        } else if (starthour == endhour) {
            if (startmin > endmin) {
                Toast.makeText(getApplicationContext(), "Start Time Should Be Less Than End Time", Toast.LENGTH_SHORT).show();
            }
            else{
                tvalid = "True";
            }
        } else {
            // Toast.makeText(getApplicationContext(),"Sucess"+(endhour-starthour)+(endmin-startmin),Toast.LENGTH_SHORT).show();
            tvalid = "True";
        }
    }
same for date also