Grails日期约束

时间:2013-02-22 16:12:21

标签: grails groovy constraints

我试图将约束添加到用户提交的文本字段,即出生日期。我需要用户至少18岁但不能超过113岁。

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启动之前的日期。我只是不确定如何解决它。

有关此问题的任何想法/建议/疑虑/经验? 非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

问题是Date构造函数需要一个参数,表示自1970年1月1日00:00:00 GMT以来的毫秒数。由于Calendar.YEAR是一个常量,用于表示Calendar结构中的年份字段并且等于1,因此您将获得上述值。

答案 2 :(得分:0)

您需要使用SimpleDateFormat将用户提交的文本字段(String)转换为Date对象。然后使用Date对象创建一个Calendar,并选中Year字段。

或者你可以自己解析文本字段(String)并选择年份,转换为int并进行检查。