Reputation: 28207
How do I convert a datetime field in Grails to just date, with out capturing the time? I need to do this for comparison with system date.
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)
}
}
Upvotes: 8
Views: 14465
Reputation: 1647
Late I know, but these days, don't use Date, use LocalDate. Works fine in Grails / groovy GORM, and it's the new Java way of doing things.
Upvotes: 1
Reputation: 932
You should use startdate.clearTime()
We do this by overwriting the setter for our domain classes that only need the date and not the time. That way, we can compare the dates of two instances without having to do this later. :
def setStartDate( Date date ) {
date.clearTime()
startDate = date
}
Upvotes: 2
Reputation: 28207
I cracked it :
startDate(validator: {return (it >= new Date()-1)})
It was that simple ;-)
To change the view in GSP page:
<g:datePicker name="startDate" value="${trip?.startDate}" years="${years}" precision="day" />
Thanks everyone for the contribution
Upvotes: 3
Reputation: 13357
There's [unfortunately] not an "out-of-the box" method for performing this operation in Grails|Groovy|Java
.
Somebody always throws in Joda-Time any time a java.util.Date
or java.util.Calendar
question is raised, but including yet another library is not always an option.
Most recently, for a similar problem, we created a DateTimeUtil
class with static
methods and something like the following to get a Date
only:
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()
}
//...
}
Then, in the validator, you can use
startDate(validator: {return (it.after(DateTimeUtil.today))}) //Groovy-ism - today implicitly invokes `getToday()`
Upvotes: 7
Reputation: 6182
Try using 'java.sql.Date' not 'java.util.Date' as a type of your Date property along with
formatDate
Purpose
Allows the formatting of java.util.Date instances using the same patterns defined by the SimpleDateFormat class.
Examples
Description
Attributes
* format (required) - The format to use for the date
* date (required) - The date object to format
Upvotes: 1