我的脚本从文件中读取一个字符串,并将其评估为在TimeCategory中作为TimeDuration工作。如果字符串以“ - ”开头,则抛出异常。
我的简化剧本:
import groovy.time.TimeCategory;
String string = "-1.day"
Date now = new Date()
use(TimeCategory)
{
def x = new Date() + evaluate(string)
println x
}
抛出:
groovy.lang.MissingMethodException: No signature of method: groovy.time.Duration.negative() is applicable for argument types: () values: []
Possible solutions: notify()
目前我的解决方案是:
import groovy.time.TimeCategory;
String string = "-1.day"
Date now = new Date()
use(TimeCategory)
{
def x
if(string.startsWith("-"))
{
string = string.substring(1)
x = now - evaluate(string)
}
else
{
x = now + evaluate(string)
}
println x
}
虽然可以做到以下几点。但是......我不喜欢它。我不确定后果(它会用于不同的时间单位吗?“-1.day + 2.hours-3.minutes”):
String prestring = "-1.day"
String string = "0.day$prestring"
有什么建议吗?
答案 0 :(得分:3)
问题是评估操作的顺序:
-1.day
相当于-(1.day)
或(1.day).negative()
要解决此问题,您可以先应用括号来评估减号运算符:
(-1).day
另一种解决方案是向negative()
类添加Duration
方法。
Duration.metaClass.negative = { ->
new Duration(-delegate.days,
-delegate.hours,
-delegate.minutes,
-delegate.seconds,
-delegate.millis)
}