2013-02-22 4 views
0

Im пытается добавить ограничения к пользовательскому текстовому полю, которое есть Дата рождения. Мне нужно, чтобы пользователь был как минимум 18 лет, но ему не исполнилось 113 лет.Grails Date Contraints

final static Date MIN_DATE = new Date(Calendar.YEAR-18) 
final static Date MAX_DATE = new Date(Calendar.YEAR-100) 

static constraints = { 
    dob(nullabe: false, min: MIN_DATE, max: MAX_DATE 
} 

Когда я,

System.out.println('Year Max Date: ' + person.MAX_DATE) 

это дает мне,

Year Max Date: Wed Dec 31 17:59:59 CST 1969 

и так же дату мин.

Я пытался делать

final static Date MIN_DATE = new Date().getAt(Calendar.YEAR)-18 

, но это не работает. Я также попытался сделать это без -18 и получил правильный ответ, но это было 7 часов. Когда я попытался перезапустить приложение из локального, он разбил его. И я не могу воссоздать его с тех пор.

Я пришел к пониманию того, что дата его подачи - это дата «Эпоха» или дата перед выпуском Unix. Я просто не уверен, как обойти это.

Любые идеи/предложения/проблемы/опыт работы с этой проблемой? Любая помощь будет принята с благодарностью.

ответ

1

Я не согласен с этими ограничениями, во-первых, как они кажутся произвольными (почему кто-то должен не быть старше 100? И почему я не могу просто лежать, если я 16?)

А во-вторых, если веб-сервер находится на несколько лет, эти статические даты будут медленно дрейфовать

Но в любом случае (эти проблемы в стороне), я считаю, что вы хотите:

final static Date MIN_DATE = Calendar.instance.with { add(YEAR, -18) ; it }.time 
final static Date MAX_DATE = Calendar.instance.with { add(YEAR, -100) ; it }.time 
+0

Св приложение, которое используют сотрудники. Здесь просто ловить и избегать опечаток. Но все получилось прекрасно. Большое спасибо. И фактически логически, мин и макс необходимо было переключить. Я очень ценю эту помощь! – CoffeePeddlerIntern

0

Проблема заключается в том, что конструктор Date ожидает аргумент, представляющий миллисекунды с 1 января 1970 года, 00:00:00 GMT. Поскольку Calendar.YEAR является константой, которая используется для представления поля года из структуры Calendar и равна 1, вы получаете вышеуказанные значения.

0

Вам необходимо преобразовать отправленное пользователем текстовое поле (String) в объект Date с помощью SimpleDateFormat. Затем создайте календарь с объектом Date и отметьте поле Year.

В качестве альтернативы вы можете просто проанализировать текстовое поле (String) самостоятельно и выбрать год, преобразовать в int и выполнить проверку.