我需要检查用户是否至少13岁。 问题是从PickerComponent给它的Validator的对象是一个String,而不是Date(正如我预期的那样)。 该字符串根据我的语言环境(在模拟器中)进行格式化,因此对于“2003年5月9日”我得到字符串“09/05/03”(我也很惊讶,年份仅由两位数字表示四个。)
所以...我尝试了以下代码,但它不起作用(在我的语言环境中)。我需要一个适用于Date PickerComponent的Validator(它也独立于语言环境):
PickerComponent date = PickerComponent.createDate(new Date()).label("Data di nascita").errorMessage("Hai almeno 13 anni?");
Validator validator = new Validator();
validator.addConstraint(date, new Constraint() {
@Override
public boolean isValid(Object value) {
boolean res = false;
if (value instanceof String) {
String inputDate = (String) value;
Log.p("-----------------");
Log.p("Inserted birthday date: " + inputDate);
Log.p("-----------------");
try {
Calendar birthday = Calendar.getInstance();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/mm/yy");
birthday.setTime(simpleDateFormat.parse(inputDate));
Calendar nowLess13years = Calendar.getInstance();
nowLess13years.setTime(new Date());
nowLess13years.add(Calendar.YEAR, -13);
if (birthday.before(nowLess13years) || birthday.equals(nowLess13years)) {
res = true;
}
} catch (ParseException ex) {
Log.p("Cannot parse the date");
}
}
return res;
}
@Override
public String getDefaultFailMessage() {
return "You must be at least 13 years old";
}
});
答案 0 :(得分:1)
这是选择器代码中一个非常愚蠢的错误:
if(cmp instanceof Picker) {
((Picker)cmp).getValue();
}
而不是:
if(cmp instanceof Picker) {
return ((Picker)cmp).getValue();
}
明天会修好......