【问题标题】:No signature of method: java.util.Date.minus() is applicable for argument types: (Integer)? [duplicate]没有方法签名:java.util.Date.minus() 适用于参数类型:(整数)? [复制]
【发布时间】:2022-01-14 00:41:52
【问题描述】:

我正在将 grails 2.2 升级到 grails 4.0.10。

在使用 java 7 的 grails 2.2 中,这曾经可以工作

def eanalytics = EventAnalytics.createCriteria().get(){
    eq('event', raceGroup)
    lt('dateCreated', timeService.now())
    gt('dateCreated', timeService.now() - 1)
}

现在对于 grails 4 和 java 8,我遇到了这个异常

Caused by: groovy.lang.MissingMethodException: No signature of method: java.util.Date.minus() is applicable for argument types: (Integer) values: [1]
Possible solutions: find(), find(groovy.lang.Closure), is(java.lang.Object), any(), print(java.io.PrintWriter), use([Ljava.lang.Objec

似乎我无法通过仅减去 java 8 中迄今为止的天数来获得新日期。执行此操作的等效代码是什么?感谢您的帮助。

timeservice.now 是

def now(){
        def now = new Date()
        return now
    }

【问题讨论】:

  • 在 Grails 4.0.12 中为我工作,所以似乎发生了一些奇怪的事情。尝试使用该版本,或者尝试通过将减法分配给标准之前的变量来隔离问题。可能不相关的注释:您还使用 get() ,它依赖于始终返回单个结果的查询,我建议使用 withCriteria 代替。
  • 感谢我通过更改为 localdate 然后执行减号然后返回 java util date 来修复它
  • @wwwclaes “所以似乎发生了一些奇怪的事情” - 发生的只是缺少依赖项。

标签: grails java-8 grails-4


【解决方案1】:

日期扩展方法已移至 org.codehaus.groovy:groovy-dateutil。如果您添加对该库的依赖项,minus 方法应该会开始工作。

【讨论】:

    【解决方案2】:

    我先将日期更改为 localdate,然后减去 1,然后再更改回 java.util.date。

    def localDate = timeService.now().toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDate().minusDays(1)
    
            def gdate2 = Date.from(localDate.atStartOfDay(java.time.ZoneId.systemDefault()).toInstant());
    

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      相关资源
      最近更新 更多