我试图将约束添加到用户提交的文本字段,即出生日期。我需要用户至少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启动之前的日期。我只是不确定如何解决它。
有关此问题的任何想法/建议/疑虑/经验? 非常感谢任何帮助。
答案 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并进行检查。