Сохранение и запрос даты в GORM Grails - PullRequest
3 голосов
/ 19 июля 2011

У меня есть таблица базы данных TableA, в которой есть столбец «theDate», для которого тип данных в базе данных - DATE.

Когда я сохраняю java.util.Date в «theDate» через GORM, он появляетсясохранить только значение даты при просмотре данных в таблице, просто выполнив команду select * from TableA.

Однако, когда я запускаю запрос, такой как:

select * from TableA where theDate = :myDate

Нет результатовнайдены, но если я запускаю что-то вроде:

select * from TableA where theDate <= :myDate

я получаю результаты.

Так что время похоже на это.

Мой вопрос: как мнесохранить дату и запрос даты, полностью игнорируя время и сопоставляя только точную дату?

Спасибо.

примечание: я также пытался использовать sql.Date и util.Calendar, нобезуспешно.

Ответы [ 5 ]

7 голосов
/ 22 июля 2011

clearTime ()

Вы можете использовать clearTime() перед сохранением и перед сравнением обнуления полей времени:

// zero the time when saving
new MyDomain(theDate: new Date().clearTime()).save()

// zero the target time before comparing
def now = new Date().clearTime()
MyDomain.findAll('SELECT * FROM MyDomain WHERE theDate = :myDate', [myDate: now])

joda-time plugin

Альтернативой может быть установка joda-time plugin и использование типа LocalDate (который толькосодержит информацию о дате, без раз) вместо Date.Что бы это ни стоило, я не думаю, что работал над проектом с датами без использования плагина Joda.Оно того стоит.

1 голос
/ 11 сентября 2012

Если у вас есть дата, сохраненная без очистки, вы можете получить ее, используя диапазон, как писал Джордан Х., но более простым способом.

def getResults(Date date) {

    def from = date.clearTime()
    def to = from + 1

    def results = MyDomain.findAll("from MyDomain where dateCreated between :start and :stop" ,[start:from,stop:to])

}
0 голосов
/ 10 марта 2013

Вы можете использовать дату типа БД, а не дату и время, в поле типа

0 голосов
/ 22 июля 2011

Я понял это.

Я использовал DateGroovyMethods.clearTime, чтобы очистить значение времени перед сохранением.

0 голосов
/ 20 июля 2011

Ваш вопрос может быть дубликатом. См. Преобразование даты и времени в дату . Но если у кого-то есть более свежая информация, это было бы здорово.

Если это не поможет, вы можете взломать его, как я мог, с ограничением МЕЖДУ, например,

def today = new Date()
def ymdFmt = new java.text.SimpleDateFormat("yyyy-MM-dd")
def dateYmd = ymdFmt.format(today)
def dateTimeFormat = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
def startDate = dateTimeFormat.parse("${dateYmd} 00:00:00");
def endDate = dateTimeFormat.parse("${dateYmd} 23:59:59");
MyDomain.findAll("from MyDomain where dateCreated between ? and ?", [startDate, endDate])

Это определенно не красиво, но может привести тебя туда, куда ты идешь.

...