Groovy TimeDuration参数类型

时间:2015-06-10 15:03:30

标签: date groovy

我对groovy很新(并且没有任何Java经验) - 但是我遇到了一个对我没有意义的问题。我的猜测是我对这些语言中对象和类如何工作的误解。我的问题可能非常基础 - 非常感谢任何帮助。

我正在尝试计算两个日期之间的周数。我的代码是这样的(它可能更简洁,但我已经扩展它以使每一步更清晰):

import groovy.time.TimeCategory

start = new Date(year: 2014, month: Calendar.APRIL, date: 1, hours: 12, minutes: 12, seconds: 0)
finish = new Date(year: 2014, month: Calendar.MAY, date: 4, hours: 1, minutes: 12, seconds: 0)


use ( TimeCategory ) {
    diff = finish - start
    println getWeeks(diff)       
}

我收到错误

  

groovy.lang.MissingMethodException:没有方法签名:Script1.getWeeks()适用于参数类型:(groovy.time.TimeDuration)值:[32天,13小时]

但是,如果我将打印行更改为println diff.getClass().name

我的结果输出是

  

groovy.time.TimeDuration

所以我的问题基本上是:如果diff对象是类groovy.time.TimeDuration并且getWeeks需要此类的参数,为什么我会收到错误?

1 个答案:

答案 0 :(得分:1)

你应该使用:

use ( TimeCategory ) {
    diff = finish - start
    println diff.weeks 
}

你在groovy doc static Duration getWeeks(Integer self)中看到的是groovy系统如何调用方法。

几乎所有这些静态groovy方法都有这种形式:static doSmth( self, otherArgs... ),您必须将其称为self.doSmth( otherArgs... )