Datetime groovy中不使用静态对象的严格日期时间解析
我正试图用严格/精确的解析在Java7上运行的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
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”)?