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_time
和 c
已建立并可访问。
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
我想禁用以下代码的未来计时。如果用户选择未来的时间,我想在这里发出通知。但是,这里的日期验证工作正常。只是时间选择的问题。
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_time
和 c
已建立并可访问。
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