在Groovy中将字符串日期转换为日期格式时出现问题。

3

我想将一个包含日期的字符串与当前日期进行比较,但是当我尝试将该字符串解析为日期格式时,总是会出现错误。

引起问题的代码部分:

String data = "12-05-2020"
Date teste = Date.parse("dd-MM-yyy",data)

错误信息:

groovy.lang.MissingMethodException: No signature of method: static java.util.Date.parse() is applicable for argument types: (String, String) values: [dd-MM-yyy, 12-05-2020]
Possible solutions: parse(java.lang.String), wait(), clone(), grep(), any(), putAt(java.lang.String, java.lang.Object)
    at Script1.run(Script1.groovy:2)

看起来似乎是一些非常愚蠢的事情,如果你能帮助我,非常感谢!


请将错误作为文本添加到问题中,而不是作为图像。 - cfrick
我已经成功解决了这个问题,感谢大家的贡献! - 19jmrs
3个回答

8
自 Groovy 2.5 开始(我想是这样),标准的 Java Date 扩展没有随 groovy-all jar 一起提供。
如果您必须使用它们,则需要包含另一个依赖项。
org.codehaus.groovy:groovy-dateutil:«version»

(其中«version»与您使用的Groovy版本相同)
它被删除的原因是在java.time包中有新的(更好的)日期时间类...
因此,您可以使用以下替代方案:
import java.time.LocalDate

String data = "12-05-2020"
LocalDate teste = LocalDate.parse(data, "dd-MM-yyyy")

无需额外的库


@19jmrs 你使用的是Java 8或更高版本吗?你是否包含了import语句?此外,我已经纠正了代码示例。请再试一次。 - Basil Bourque
代码示例很好,本地运行正常。已回滚。@19jmrs,Java版本问题很重要。 - tim_yates
你不需要四个 y 字符而不是三个吗? - Basil Bourque
我通过简单地更改IDE解决了这个问题,o.O,感谢大家的回答!对造成的不便表示抱歉。 - 19jmrs
java.time JDK的增强功能仍需要额外的库groovy-datetime - basin
显示剩余3条评论

1

参数数据类型不匹配

错误信息告诉你出了什么问题:

静态 java.util.Date.parse() 方法没有可适用的参数类型: (String, String)

该类上不存在接受一对 String 对象的方法。

相反,你应该使用:

  • 仅使用 java.time 类。永远不要使用可怕的日期时间类,如 DateCalendar。这些遗留类在采用 JSR 310 后已完全被 java.time 取代。
  • DateTimeFormatter 来指定自定义格式化模式。

另一个问题: 你的格式化模式只有一个 y,而需要四个。此外,在 java.time 中,可以使用 uuuu 而不是 yyyy(尽管对于当代日期没有区别)。

在 Java 语法中(我不知道 Groovy):

String input = "12-05-2020" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
LocalDate teste = LocalDate.parse( input , f ) ;

1
这是Groovy。有一个方法String,String(我在下面撤回了我的正确解决方案)。http://docs.groovy-lang.org/docs/latest/html/groovy-jdk/java/time/LocalDate.html#parse(java.lang.CharSequence,%20java.lang.String) - tim_yates
@tim_yates,我不知道Groovy的这个情况。请原谅我的错误。 - Basil Bourque

0
我在使用Eclipse 2022-03 (4.23.0)和Groovy插件运行Groovy脚本时遇到了同样的问题。 我通过将groovy-dateutil-.jar添加到run>Run Configurations...>Dependencies Tab>Classpath Entries中解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接