我有一个旧的Oracle表映射到下面列出的Grails中的Domain类:

class myDomain implements Serializable { 
 
    String id 
    String baseCountry 
    Date expireDate 
 
static constraints = { 
} 
static mapping = { 
    version false 
    autoTimestamp false 
    datasource 'OraDataSource' 
    table "MY_ACCOUNT" 
    id column: "LICENSE_NUMBER", generator: "assigned" 
    baseCountry column: "BASE_COUNTRY" 
    expireDate column: "EXPIRE_DATE" NOTE:  This is an Oracle DATE type 
} 

我在Grails中设置了日期,如下所示:
def now = new Date() 
def currentYear = now[YEAR] 
def expireDateBegin  = new Date() 
def expireDateEnd = new Date() 
 
expireDateBegin[YEAR] = currentYear 
expireDateBegin[MONTH] = DECEMBER 
expireDateBegin[DATE] = 30 
 
expireDateEnd[YEAR] = currentYear +1 
expireDateEnd[MONTH] = JANUARY 
expireDateEnd[DATE] = 01         

当我使用带有日期条件的动态查找器时,没有返回结果:
def iftaAccountInfo =  
    CTaxAccount.findByBaseCountryAndExpireDateBetween( 
        country,  
        expireDateBegin,  
        expireDateEnd,  
        [max: 1, sort: "expireDate", order: "desc"]) 

如果仅对国家/地区使用动态查找器,则可以看到结果,而在查看调试器时,该日期将被转换为时间戳。

设置了 logSql = true时,SQL是正确的,但是当GORM在查询中设置日期时,日期发生了一些变化。我不知道这个。任何帮助将不胜感激。
我还尝试使用 Date().ClearTime()清除时间。没变。

我正在运行Grails 2.3.4,OJDBC7.jar和JDK 1.7_045。 Oracle数据源设置为ReadOnly,因为这是我用于查找的旧数据库。

请您参考如下方法:

您有理由将日期分成几部分吗?我通常使用SimpleDateFormat类并处理从params对象接收的字符串。

import java.text.SimpleDateFormat 
 
def country = params.country 
String strExpireDateBegin, strExpireDateEnd 
 
//This is dependent on what values you're passing to your service. 
strExpireDateBegin = (params.startDate == null)?"":params.expireDateBegin 
strExpireDateEnd = (params.endDate == null)?"":params.expireDateEnd 
 
//This would be how I would generate the expiration date a year from the expireBeginDate 
Date expireDateBegin = new Date() 
Date expireDateEnd = expireDateBegin + 365 
 
 
***use this for rendering the string into a Date*** 
Date expireDateBegin, expireDateEnd 
expireDateBegin = new SimpleDateFormat("yyyy-MM-dd").parse(strExpireDateBegin) 
expireDateEnd = new SimpleDateFormat("yyyy-MM-dd").parse(strExpireDateEnd) 
 
***results = MyCriteria.list { 
  and { 
      country = myCountry 
  } 
  between("expireDate", expireDateBegin, expireDateEnd) 
  order("expireDate", "desc") 
} 

***用于日期渲染的Bootstrap.groovy配置
def init = { servletContext -> 
    JSON.registerObjectMarshaller(Date) { 
        return it?.format("yyyy-MMM-dd") 
    } 
} 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!