Datetime groovy中不使用静态对象的严格日期时间解析

Datetime groovy中不使用静态对象的严格日期时间解析,datetime,groovy,jodatime,strict,exact-match,Datetime,Groovy,Jodatime,Strict,Exact Match,我正试图用严格/精确的解析在Java7上运行的Groovy中解析一个日期时间对象 我尝试过使用SimpleDataFormat,将setLenient设置为false,但仍然太宽松,例如,使用yyyy-MM-dd格式解析值2018-8-2仍然成功(并返回错误的日期) 我在这里找到了一个可能的答案: 然而,由于安全原因,我正在工作的环境不允许我调用静态方法,从而阻止我使用Joda的方法 DateTimeFormat.forPattern("yyyy-MM-dd") 鉴于此限制,如何在Groov

我正试图用严格/精确的解析在Java7上运行的Groovy中解析一个日期时间对象

我尝试过使用
SimpleDataFormat
,将
setLenient
设置为
false
,但仍然太宽松,例如,使用
yyyy-MM-dd
格式解析值
2018-8-2
仍然成功(并返回错误的日期)

我在这里找到了一个可能的答案:

然而,由于安全原因,我正在工作的环境不允许我调用静态方法,从而阻止我使用Joda的方法

DateTimeFormat.forPattern("yyyy-MM-dd")

鉴于此限制,如何在Groovy中对日期时间字符串进行精确/严格的解析?

您可以使用Joda Time()中的
DateTimeFormatterBuilder
,使用简单的正则表达式大致确认格式。(有更好的方法,但它使用静态方法。)

完整的例子

考虑:

def getDateTime(def s) {
    def result = null

    def regex = /^\d\d\d\d-\d\d-\d\d$/

    if (s ==~ regex) {
        // yyyy-MM-dd
        def formatter = new DateTimeFormatterBuilder()
                             .appendYear(4,4)
                             .appendLiteral('-')
                             .appendMonthOfYear(2)
                             .appendLiteral('-')
                             .appendDayOfMonth(2)
                             .toFormatter()
        try {
            result = formatter.parseDateTime(s)
        } catch (Exception ex) {
            // System.err.println "TRACER ex: " + ex.message
        }
    }

    return result
}
用法:

assert new DateTime(2018,8,2,0,0) == getDateTime('2018-08-02')
assert null == getDateTime('18-08-02')
assert null == getDateTime('2018-8-02')
assert null == getDateTime('2018-08-2')

你是说模式的java.time.format.DateTimeFormatter.of(“yyyy-MM-dd”)?