Android 中的 DatePickerDialog,日期验证
DatePickerDialog in Android, date validation
我有一个简单的 activity,用户需要在其中选择日期(只有日期,没有时间)。我需要进行正确的验证。首先,我想将 dayOfMonth、monthOfYear 和 year 放入 3 个不同的文本视图中,然后使用 "if else" 写入条件,例如(if day <= 0 or >= 31 ...)。我试过的代码:
@Override
public void onClick(View v) {
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
datePickerDialog = new DatePickerDialog(Date.this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
tvDay.setText(dayOfMonth);
tvMonth.setText(monthOfYear);
tvYear.setText(year);
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
}
});
但这不起作用,我只能将 dayOfMonth、monthOfYear 年份放入 1 个文本视图中。像这样:
public void onClick(View v) {
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
datePickerDialog = new DatePickerDialog(Date.this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
tvDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
}
});
}
在我的案例中如何正确进行验证?这可能是个愚蠢的问题,很抱歉,但我是新手。
谢谢。
您可以使用 SimpleDateFormat
,然后 calanderObject.getTime()
会以 String
的形式为您提供格式正确的日期
这里我在方法内部传递了一个 TextView
的引用。不过这并不重要。
private void setDate(final TextView tV) {
final Calendar cal = Calendar.getInstance();
DatePickerDialog dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
cal.set(year, monthOfYear, dayOfMonth);
tV.setText(dateFormat.format(cal.getTime()));
}
}, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
dialog.show();
}
Dennis 是对的,我只想补充一点,您可以使用日历对象进行日期验证,它具有所有这些很酷的操作,比如将它与今天的日期相匹配,比如
if(someDate >= now){
...
如果您的计算需要考虑闰年(每 4 年的 29/2 日),那么尝试自己实现它会容易得多,那么您应该使用继承自 Calendar 的 GregorianCalendar。
https://developer.android.com/reference/java/util/GregorianCalendar.html
我有一个简单的 activity,用户需要在其中选择日期(只有日期,没有时间)。我需要进行正确的验证。首先,我想将 dayOfMonth、monthOfYear 和 year 放入 3 个不同的文本视图中,然后使用 "if else" 写入条件,例如(if day <= 0 or >= 31 ...)。我试过的代码:
@Override
public void onClick(View v) {
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
datePickerDialog = new DatePickerDialog(Date.this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
tvDay.setText(dayOfMonth);
tvMonth.setText(monthOfYear);
tvYear.setText(year);
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
}
});
但这不起作用,我只能将 dayOfMonth、monthOfYear 年份放入 1 个文本视图中。像这样:
public void onClick(View v) {
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
datePickerDialog = new DatePickerDialog(Date.this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
tvDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
}
});
}
在我的案例中如何正确进行验证?这可能是个愚蠢的问题,很抱歉,但我是新手。
谢谢。
您可以使用 SimpleDateFormat
,然后 calanderObject.getTime()
会以 String
这里我在方法内部传递了一个 TextView
的引用。不过这并不重要。
private void setDate(final TextView tV) {
final Calendar cal = Calendar.getInstance();
DatePickerDialog dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
cal.set(year, monthOfYear, dayOfMonth);
tV.setText(dateFormat.format(cal.getTime()));
}
}, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
dialog.show();
}
Dennis 是对的,我只想补充一点,您可以使用日历对象进行日期验证,它具有所有这些很酷的操作,比如将它与今天的日期相匹配,比如
if(someDate >= now){ ...
如果您的计算需要考虑闰年(每 4 年的 29/2 日),那么尝试自己实现它会容易得多,那么您应该使用继承自 Calendar 的 GregorianCalendar。
https://developer.android.com/reference/java/util/GregorianCalendar.html