Codename One - addConstraint到PickerComponent的日期

时间:2018-05-09 08:49:28

标签: codenameone

我需要检查用户是否至少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";
            }
        });

1 个答案:

答案 0 :(得分:1)

这是选择器代码中一个非常愚蠢的错误:

    if(cmp instanceof Picker) {
        ((Picker)cmp).getValue();
    }

而不是:

    if(cmp instanceof Picker) {
        return ((Picker)cmp).getValue();
    }

明天会修好......