Конвертировать дату и время в дату - PullRequest
8 голосов
/ 08 декабря 2008

Как преобразовать поле даты и времени в 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)
    }
}

Ответы [ 7 ]

7 голосов
/ 08 декабря 2008

[к сожалению] не существует готового метода для выполнения этой операции в Grails|Groovy|Java.

Кто-то всегда добавляет Joda-Time каждый раз, когда возникает вопрос java.util.Date или 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()
    }

    //...

}

Затем в валидаторе вы можете использовать

startDate(validator: {return (it.after(DateTimeUtil.today))}) //Groovy-ism - today implicitly invokes `getToday()` 
3 голосов
/ 25 февраля 2009

Лучше использовать плагин каландра в Grails.

3 голосов
/ 09 декабря 2008

Я взломал его:

startDate (валидатор: {return (it> = new Date () - 1)})

Это было так просто; -)

Чтобы изменить вид на странице GSP:

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

Спасибо всем за вклад

2 голосов
/ 15 октября 2012

Вы должны использовать startdate.clearTime()

Мы делаем это, перезаписывая сеттер для наших классов домена, которым нужна только дата, а не время. Таким образом, мы можем сравнить даты двух экземпляров без необходимости делать это позже. :

def setStartDate( Date date ) {
    date.clearTime()
    startDate = date
}
1 голос
/ 08 декабря 2008

Попробуйте использовать 'java.sql.Date', а не 'java.util.Date' в качестве типа вашего свойства Date вместе с

FormatDate

Назначение

Разрешает форматирование экземпляров java.util.Date с использованием тех же шаблонов, которые определены в классе SimpleDateFormat.

Примеры

Описание

Атрибуты

* format (required) - The format to use for the date
* date (required) - The date object to format
0 голосов
/ 08 декабря 2008

Вы пробовали использовать jodatime ? Это значительно облегчает работу с датой и временем в Java.

0 голосов
/ 08 декабря 2008

Может быть

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