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... )
我对 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... )