Groovy中java.util.Date.parse()方法调用报错问题咨询
解决Groovy中Date.parse()方法调用异常的问题
问题分析
你碰到的groovy.lang.MissingMethodException是因为在新版Groovy里,java.util.Date的实例已经没有接受两个参数的parse方法了。旧版Groovy曾给Date实例添加过这个扩展方法,但新版本中它被调整为静态方法,而你写的new Date().parse("d/M/yyyy H:m:s", theDate)实际上会去调用Java原生的Date.parse()——这个原生方法只接受一个参数,自然会因为参数不匹配报错。
解决办法
这里提供两种可行的方案,你可以根据需求选择:
方案1:使用Groovy的静态Date.parse方法
直接调用静态方法,不需要先创建Date实例,这是最贴合你原有代码逻辑的修改方式:
String theDate = "28/09/2010 16:02:43"; def newdate = Date.parse("d/M/yyyy H:m:s", theDate);
执行后就能得到你预期的Tue Sep 28 16:02:43 CEST 2010结果。
方案2:使用Java 8+的现代日期API(推荐)
由于java.util.Date是已过时的API,更推荐使用Java 8引入的java.time包下的日期类,比如LocalDateTime,配合DateTimeFormatter来解析日期:
import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.time.ZoneId String theDate = "28/09/2010 16:02:43" // 定义日期格式 def formatter = DateTimeFormatter.ofPattern("d/M/yyyy H:m:s") // 解析为LocalDateTime对象 def localDateTime = LocalDateTime.parse(theDate, formatter) // 如果需要兼容旧代码,转换成java.util.Date: def utilDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant())
这种方式更安全,也避免了旧API的各种线程安全和设计缺陷问题。
内容的提问来源于stack exchange,提问作者Filip Kostroš
相关产品推荐
相关产品推荐

