Groovy / Grails / Gorm 没有分钟的日期。

Groovy / Grails / Gorm dates with no minutes.

我有一个带日期的复合主键。

id composite: ["division", "expenseDate"]

String division
Date expenseDate

def getPK() {
    ["division":division, "expenseDate":expenseDate]
}

我正在像这样生成页面链接。

<g:link controller="recoveryDetail" action="edit" params="${it.getPK()}">
    <g:formatDate format="MM/dd/yyyy" date="${it.expenseDate}" />
</g:link>

我最终生成了一个像这样的 URL

http://localhost:8080/pisr/recoveryDetail/edit?division=BUFFALO&expenseDate=2007-04-25+00%3A00%3A00.0

我想消除出现在 URL 中的时间。

我还发现很难将对象与来自数据库的日期的时间为零的事实进行比较,但我的本地对象具有本地时间。示例 "division":"BUFFALO","expenseDate":"2015-07-07T04:00:00Z"。我如何 return 零时间而不是我的本地时间。

最后,我使用了 grails datePicker 组件,当我收到带有参数的日期时,我得到了 expenseDate_day:7, expenseDate_year:2015, expenseDate_month:7。如何将它们转换回 groovy 中的日期对象,以便我可以针对日期执行以下查询?

RecoveryDetail.createCriteria().get  {
    eq("division", recoverySetupInstance.division)
    eq("expenseDate", expenseDate)
}

我会在来自 Koloritnij 的评论后尝试回答这个问题

这种情况下的解决方法是更改​​ getPK 以正确格式化日期。所有代码爱好者通过 getPK 所做的就是在 domainClass 中创建他自己的参数映射,他可以在 gsp 中需要时手动执行:

所以这里是 GSP 中的不同样式,在顶部的这个实例中需要正确的调用:

<g:link action="edit" params="${instance.getPK2()}">
<g:formatDate format="MM/dd/yyyy" date="${instance.expenseDate}" />  - PK2 WAY
</g:link><br>

<g:link action="edit" params="${instance.getPK()}">
<g:formatDate format="MM/dd/yyyy" date="${instance.expenseDate}" />  - PK WAY
</g:link><br>

<g:link action="edit" params="${["division":instance.division, "expenseDate":g.formatDate(format:'MM/dd/yyy', date:instance.expenseDate)]}">
<g:formatDate format="MM/dd/yyyy" date="${instance.expenseDate}" />  - Formatted using g.format
</g:link><br>

<g:link action="edit" params="${["division":instance.division, "expenseDate":instance.expenseDate.format("MM/dd/yyy")]}">
    <g:formatDate format="MM/dd/yyyy" date="${instance.expenseDate}" />  - Formatted using format
</g:link><br>

各种 GSP 样式做相同的事情。

具有新 getPK2 的 DomainClass(其格式是核心日期)

class RecoveryDetail {

    //id composite: ["division", "expenseDate"]

    String division
    Date expenseDate

    def getPK() {
        ["division":division, "expenseDate":expenseDate]
    }

    def getPK2() {
        ["division":division, "expenseDate":expenseDate.format("MM/dd/yyy")]
    }
}

你的控制器输出这个:

class RecoverDetailController {
    def index() {
        def instance = RecoveryDetail.findByDivision('foo')
        [instance:instance]
    }

    def edit() { 
        render "params are ${params}"
        // -PK2 way:
        //params are [division:foo, expenseDate:07/08/2015, action:edit, format:null, controller:recoverDetail]

        // - PK WAY
        // params are [division:foo, expenseDate:2015-07-08 17:53:48.565, action:edit, format:null, controller:recoverDetail]

        //- Formatted using g.format
        //params are [division:foo, expenseDate:07/08/15, action:edit, format:null, controller:recoverDetail]

        //- Formatted using format
        //params are [division:foo, expenseDate:07/08/2015, action:edit, format:null, controller:recoverDetail]
    }

}

您的 bootstrap 在虚拟测试条目中加载:

import test.RecoveryDetail
class BootStrap {
    def init = { servletContext ->
        RecoveryDetail.findOrSaveWhere(division: 'foo', expenseDate:new Date()).save(flush:true)
    }
}