SoapUI中Groovy无需指定格式解析日期字符串的方法
在SoapUI中用Groovy自动解析未知格式的日期字符串
Groovy本身没有完全无需指定格式就能解析任意日期字符串的原生方法,但可以通过预定义常见格式列表,让解析器逐个尝试匹配的方式实现近似需求,以下是两种可行方案:
方案1:使用Java 8+时间API(推荐)
利用DateTimeFormatterBuilder构建支持多种格式的解析器,尝试匹配预定义的常见日期格式,代码示例:
import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatterBuilder import java.time.temporal.TemporalAccessor // 待解析的日期字符串 def targetDateStr = "2024-05-20 15:40:00" // 定义需要覆盖的常见日期格式,可根据实际场景补充 def commonFormats = [ DateTimeFormatter.ISO_LOCAL_DATE, DateTimeFormatter.ISO_LOCAL_DATE_TIME, DateTimeFormatter.ofPattern("yyyy/MM/dd"), DateTimeFormatter.ofPattern("MM/dd/yyyy"), DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss"), DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm") ] // 构建多格式解析器 def formatterBuilder = new DateTimeFormatterBuilder() commonFormats.each { formatter -> formatterBuilder.appendOptional(formatter) } def multiFormatParser = formatterBuilder.toFormatter() try { TemporalAccessor parsedResult = multiFormatParser.parseBest(targetDateStr) // 根据解析结果输出对应类型的日期 if (parsedResult instanceof LocalDateTime) { println "解析结果(LocalDateTime):${parsedResult}" } else { println "解析结果(LocalDate):${parsedResult}" } } catch (Exception e) { println "无法解析该日期字符串:${targetDateStr}" // 可选:打印异常详情排查问题 // e.printStackTrace() }
方案2:借助Apache Commons Lang工具类
如果SoapUI环境已包含Apache Commons Lang库(多数场景下自带),可以用DateUtils.parseDate方法直接传入格式列表进行解析:
import org.apache.commons.lang3.time.DateUtils def targetDateStr = "05/20/2024" // 预定义格式数组 def datePatterns = [ "yyyy-MM-dd", "yyyy/MM/dd HH:mm:ss", "MM/dd/yyyy", "dd-MM-yyyy" ] as String[] try { Date parsedDate = DateUtils.parseDate(targetDateStr, datePatterns) println "解析后的Date对象:${parsedDate}" } catch (Exception e) { println "解析失败:${e.message}" }
注意事项
- 不存在能解析所有格式的"万能方法",只能通过扩展预定义格式列表覆盖更多场景
- 优先使用Java 8+的
LocalDate/LocalDateTime等新时间类,比旧的Date类更安全、易维护
内容的提问来源于stack exchange,提问作者rozza
相关产品推荐
相关产品推荐

