Groovy TimeDuration 参数类型

Groovy TimeDuration Argument Types

我对 groovy 很陌生(对 Java 没有任何经验)- 但我 运行 遇到了一个没有意义的问题我。我的猜测是我误解了对象和 classes 在这些语言中的工作方式。我的问题可能非常基本 - 非常感谢任何帮助。

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

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: No signature of method: Script1.getWeeks() is applicable for argument types: (groovy.time.TimeDuration) values: [32 days, 13 hours]

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

我的结果输出是

groovy.time.TimeDuration

所以我的问题本质上是:如果 diff 对象是 class groovy.time.TimeDuration 并且 getWeeks 需要这个 class 的参数,为什么我得到一个错误?

你应该使用:

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

您在 groovy 文档 static Duration getWeeks(Integer self) 中看到的是 groovy 系统调用方法的方式。

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