将datetime转换为日期

时间:2008-12-08 11:55:57

标签: datetime grails groovy

如何将Grails中的日期时间字段转换为日期,而无需捕获时间?我需要这样做以与系统日期进行比较。

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)
    }
}

8 个答案:

答案 0 :(得分:7)

[遗憾的是]在[{1}}中执行此操作的方法并非“开箱即用”。

Grails|Groovy|Javajava.util.Date问题出现的任何时候,有人始终会引发Joda-Time,但包括另一个库并不总是一个选项。

最近,针对类似问题,我们使用java.util.Calendar方法创建了DateTimeUtil类,类似以下内容,仅获得static

Date

然后,在验证器中,您可以使用

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()
    }

    //...

}

答案 1 :(得分:3)

我破解了它:

startDate(验证者:{return(it> = new Date() - 1)})

就这么简单; - )

要更改GSP页面中的视图:

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

感谢大家的贡献

答案 2 :(得分:3)

最好在Grails中使用日历插件。

答案 3 :(得分:2)

您应该使用startdate.clearTime()

我们通过覆盖只需要日期而不是时间的域类的setter来实现这一点。这样,我们可以比较两个实例的日期,而不必在以后执行此操作。 :

def setStartDate( Date date ) {
    date.clearTime()
    startDate = date
}

答案 4 :(得分:1)

尝试使用'java.sql.Date'而不是'java.util.Date'作为Date属性的类型以及

<强> formatDate

<强>目的

允许使用SimpleDateFormat类定义的相同模式格式化java.util.Date实例。

<强>实施例

<强>描述

<强>属性

* format (required) - The format to use for the date
* date (required) - The date object to format

答案 5 :(得分:1)

我知道晚了,但这些天,不要使用 Date,使用 LocalDate。在 Grails/groovy GORM 中运行良好,这是 Java 的新处理方式。

答案 6 :(得分:0)

也许

startDate(validator: {d = new Date(); return (it..d) >= 0})

答案 7 :(得分:0)

您是否尝试过使用jodatime?它使得在java中使用日期和时间变得更加容易。