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

ユーザーが送信したテキスト フィールド (文字列) を SimpleDateFormat を使用して Date オブジェクトに変換する必要があります。次に、Date オブジェクトを使用して Calendar を作成し、Year フィールドを確認します。

または、テキスト フィールド (文字列) を自分で解析して年を選択し、int に変換してチェックすることもできます。

于 2013-02-22T16:16:47.737 に答える
0

問題は、Dateコンストラクターが 1970 年 1 月 1 日 00:00:00 GMT からのミリ秒を表す引数を期待していることです。Calendar.YEARは構造体の年フィールドを表すために使用される定数であり、1Calendarに等しいため、上記の値を取得しています。

于 2013-02-22T16:16:02.320 に答える