需要帮助在今天的日期查询数据库,同时忽略时间

时间:2014-02-10 17:35:02

标签: hibernate grails jodatime

我有一个grails项目,它使用hibernate与postgres db进行通信。我正在使用joda时间插件。我一直在使用他们的DateTime格式2013-01-25 22:28:55来存储日期。我需要知道两周前发生的事情何时发生变量deadline

import org.joda.time.DateTime

Collection<PerformanceReview> outstandingSelfEvaluations(DateTime deadline) {
    Person.executeQuery("select pr from PerformanceReview as pr \
                    inner join pr.performanceReviewStatus as status \
                    where status.name in (:name) \
                    and pr.employeeEvaluation = null \
                    and pr.dateCreated = :deadline",
            [name: ['Open', 'New'], deadline: deadline])
}

主要功能

def incompleteSelfEvaluations(Integer days) {
    def deadline = LocalDate.now().minusDays(days)
    def performanceEvaluations = outstandingSelfEvaluations(deadline)

    performanceEvaluations.each { PerformanceReview pr ->
        sendSelfEvaluationReminderEmail(pr, evaluationDeadline)
    }
}

唯一的问题是,我不知道如何在忽略时间的情况下检查日期。

编辑添加了所有相关代码并删除了对此特定问题无用的错误消息

2 个答案:

答案 0 :(得分:1)

我不知道是否有更简单的方法,但一种方法是使用两个参数(一个用于开始时间,一个用于结束时间),然后使用>=和{{查询中的运算符,例如:

<

然后在调用代码中将... and pr.dateCreated >= :startTime and pr.dateCreated < :endTime 设置为午夜截止日期,并将startTime设置为午夜截止日期后的第二天。

答案 1 :(得分:0)

看起来噪音很大,但使用Hibernate的DAYMONTHYEAR功能效果很好。您可以在documentation中了解有关这些功能的更多信息。这样您就不必担心传递其他信息并且与数据库无关。

Collection<PerformanceReview> outstandingSelfEvaluations(LocalDate deadline) {
    Person.executeQuery("select pr from PerformanceReview as pr \
                    inner join pr.performanceReviewStatus as status \
                    where status.name in (:name) \
                    and pr.employeeEvaluation = null \
                    and DAY(pr.dateCreated) = DAY(:deadline)
                    and MONTH(pr.dateCreated) = MONTH(:deadline)
                    and YEAR(pr.dateCreated) = YEAR(:deadline)",
            [name: ['Open', 'New'], deadline: deadline])