Мне нужно проверить, если пользователю не менее 13 лет.
Проблема в том, что объект, передаваемый из PickerComponent его Validator, является строкой, а не датой (как я и ожидал).
Эта строка отформатирована в соответствии с моей локалью (в симуляторе), поэтому для «9 мая 2003 года» я получаю строку «09/05/03» (я также удивлен, что вместо этого год обозначается только двумя цифрами) из четырех).
Итак ... Я попробовал следующий код, но он не работает (в моей локали). Мне нужен работающий валидатор для компонента Date Picker (который также не зависит от локали):
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";
}
});