如何将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)
}
}
答案 0 :(得分:7)
[遗憾的是]在[{1}}中执行此操作的方法并非“开箱即用”。
在Grails|Groovy|Java
或java.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中使用日期和时间变得更加容易。