SoapUI 和 Groovy 将日期转换为 yyyy-MM-dd 的问题

SoapUI and problem with Groovy Convert date to yyyy-MM-dd

我用它来添加日期日期,然后将日期格式设置为 yyyy-MM-dd。但自从新的 SoapUI 版本以来,这不再有效。

import static java.util.Calendar.*

String myOrderDate(int nrOfDays){ 
    def date = new Date()
    def datePlus = date.clone()
    datePlus = datePlus + nrOfDays
    return datePlus.format('YYYY-MM-dd')
}

相反,我得到堆栈跟踪:

groovy.lang.MissingMethodException: No signature of method: java.util.Date.plus() is applicable for argument types: (Integer)

我做错了什么?

使用public Date plus(int days):

import static java.util.Calendar.*

String myOrderDate(int nrOfDays){ 
    def date = new Date()
    def datePlus = date.clone()
    datePlus = datePlus.plus(nrOfDays)
    return datePlus.format('YYYY-MM-dd')
}

你可以做得更短:

import static java.util.Calendar.*

String myOrderDate(int nrOfDays){ 
    def date = new Date()
    return date.plus(nrOfDays).format('YYYY-MM-dd')
}

由于导入库存在问题,也许您应该坚持使用 Java 方式。试试下面的代码:

import java.time.LocalDate
import java.time.format.DateTimeFormatter
    
String myOrderDate(int nrOfDays){ 
        def date = LocalDate.now().plusDays(nrOfDays)
        return date.format(DateTimeFormatter.ofPattern(('YYYY-MM-dd')))
}

如果您添加对 groovy-dateutil.

的依赖,您的代码将可以正常工作

https://github.com/jeffbrown/groovydate 查看项目。

lib/src/main/groovy/groovydate/Library.groovy 处,您的方法是按原样复制和粘贴的。

package groovydate

class Library {
    String myOrderDate(int nrOfDays) {
        def date = new Date()
        def datePlus = date.clone()
        datePlus = datePlus + nrOfDays
        return datePlus.format('YYYY-MM-dd')
    }
}

lib/src/test/groovy/groovydate/LibraryTest.groovy 的测试通过:

package groovydate

import spock.lang.Specification

class LibraryTest extends Specification {
    def "test order date"() {
        given:
        def lib = new Library()

        when:
        lib.myOrderDate(4)

        then:
        noExceptionThrown()
    }
}

只有在 lib/build.gradle#L36

表示的依赖关系才有效
implementation 'org.codehaus.groovy:groovy-dateutil:3.0.9'

如果没有 dateutil,运行时将抱怨缺少方法,因为它不存在没有缺少的依赖项。