8

時間をキャプチャせずに、Grails の datetime フィールドを日付だけに変換するにはどうすればよいですか? システム日付と比較するためにこれを行う必要があります。

class Trip 
{
    String name
    String city
    Date startDate
    Date endDate
    String purpose
    String notes

    static constraints = {
        name(maxLength: 50, blank: false)
        startDate(validator: {return (it >= new Date())}) // This won't work as it compares the time as well 
        city(maxLength: 30, blank: false)
    }
}
4

8 に答える 8

7

[残念ながら] でこの操作を実行するための「すぐに使える」方法はありませんGrails|Groovy|Java

または質問が提起されるたびに、誰かが常にJoda-Timeをスローしますが、さらに別のライブラリを含めることが常にオプションであるとは限りません。java.util.Datejava.util.Calendar

ごく最近、同様の問題のために、次のようなメソッドを含むDateTimeUtilクラスを作成して、唯一のものを取得しました。staticDate

class DateTimeUtil {

    // ...

    public static Date getToday() {
        return setMidnight(new Date())
    }

    public static Date getTomorrow() {
        return (getToday() + 1) as Date
    }

    public static Date setMidnight(Date theDate) {
        Calendar cal = Calendar.getInstance()
        cal.setTime(theDate)
        cal.set(Calendar.HOUR_OF_DAY, 0)
        cal.set(Calendar.MINUTE, 0)
        cal.set(Calendar.SECOND, 0)
        cal.set(Calendar.MILLISECOND, 0)
        cal.getTime()
    }

    //...

}

次に、バリデーターで使用できます

startDate(validator: {return (it.after(DateTimeUtil.today))}) //Groovy-ism - today implicitly invokes `getToday()` 
于 2008-12-08T13:50:02.603 に答える
3

私はそれを割った:

startDate(validator: {return (it >= new Date()-1)})

それはとても簡単でした;-)

GSP ページのビューを変更するには:

<g:datePicker name="startDate" value="${trip?.startDate}" years="${years}"  precision="day" />

貢献してくれてありがとう

于 2008-12-09T07:51:31.657 に答える
2

使用する必要がありますstartdate.clearTime()

これを行うには、時刻ではなく日付のみを必要とするドメイン クラスのセッターを上書きします。そうすれば、後でこれを行うことなく、2 つのインスタンスの日付を比較できます。:

def setStartDate( Date date ) {
    date.clearTime()
    startDate = date
}
于 2012-10-15T16:49:40.457 に答える
1

「java.util.Date」ではなく「java.sql.Date」をDateプロパティのタイプとして使用してみてください。

formatDate

目的

SimpleDateFormatクラスで定義されたものと同じパターンを使用してjava.util.Dateインスタンスのフォーマットを許可します。

説明

属性

* format (required) - The format to use for the date
* date (required) - The date object to format
于 2008-12-08T12:49:41.990 に答える
0

多分

startDate(validator: {d = new Date(); return (it..d) >= 0})
于 2008-12-08T12:56:10.153 に答える
0

jodatimeを使ってみましたか?これにより、Java での日付と時刻の操作が非常に簡単になります。

于 2008-12-08T13:02:05.383 に答える