1

我试图向用户提交的文本字段添加约束,该字段是出生日期。我需要用户至少 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 启动之前的日期。我只是不知道如何解决它。

对此问题有任何想法/建议/疑虑/经验吗?任何帮助将不胜感激。

4

3 回答 3

2

我不同意这些限制,首先因为它们看起来很随意(为什么有人不应该超过 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
于 2013-02-22T16:17:31.497 回答
0

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

于 2013-02-22T16:16:02.320 回答
0

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

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

于 2013-02-22T16:16:47.737 回答