【问题标题】:Groovy: Timeduration-Subtraction evaluated from stringGroovy:从字符串评估的时间减法
【发布时间】:2013-04-10 14:30:35
【问题描述】:

我的脚本从文件中读取一个字符串并对其进行评估以作为 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"

有什么建议吗?

【问题讨论】:

    标签: string date groovy subtraction evaluate


    【解决方案1】:

    问题在于操作的评估顺序:

    -1.day 等价于-(1.day),或(1.day).negative()

    要解决这个问题,您可以先应用括号来计算减号运算符:

    (-1).day

    另一种解决方案是在Duration 类中添加一个negative() 方法。

    Duration.metaClass.negative = { -> 
        new Duration(-delegate.days, 
                     -delegate.hours, 
                     -delegate.minutes, 
                     -delegate.seconds, 
                     -delegate.millis) 
    }
    

    【讨论】:

    • 谢谢。我将使用括号。我想“自然”地使用它,而不是到处编程。
    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2011-09-07
    • 2018-12-22
    相关资源
    最近更新 更多