我有一个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)
}
}
唯一的问题是,我不知道如何在忽略时间的情况下检查日期。
编辑添加了所有相关代码并删除了对此特定问题无用的错误消息
答案 0 :(得分:1)
我不知道是否有更简单的方法,但一种方法是使用两个参数(一个用于开始时间,一个用于结束时间),然后使用>=
和{{查询中的运算符,例如:
<
然后在调用代码中将...
and pr.dateCreated >= :startTime and pr.dateCreated < :endTime
设置为午夜截止日期,并将startTime
设置为午夜截止日期后的第二天。
答案 1 :(得分:0)
看起来噪音很大,但使用Hibernate的DAY
,MONTH
和YEAR
功能效果很好。您可以在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])