我希望能够直接将Date对象与Groovy脚本中的日期格式的String进行比较,如下所示:
if ( today > "01-01-2017" & today < "10-03-2017")
*do something*
为此,我尝试将Date类扩展为具有String的compareTo方法,如:
Date.metaClass.compareTo = {String s -> Date other = Date.parse("dd-MM-yyyy", s);
delegate.numberAwareCompareTo(other)}
它正在给我
Caught: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date
如果我这样做
Date.metaClass.compareTo << {String s -> Date other = Date.parse("dd-MM-yyyy", s);
delegate.numberAwareCompareTo(other)}
然后,我得到:
Caught: groovy.lang.GroovyRuntimeException: Cannot add new method [compareTo] for arguments [[class java.lang.String]]. It already exists!
如果它已经存在,为什么我不能将Date与String进行比较?为什么它不能识别我的overTiding compareTo方法? 帮助赞赏。谢谢,
编辑:此问题被标记为how to compare a date with current date in groovy的副本。我的问题是不同的,因为它是关于如何通过运算符重载将Date对象与日期格式的String进行比较。
答案 0 :(得分:1)
我认为你有点过于复杂......在一个简单的脚本中更改元类?为什么呢?
如何将字符串日期解析为日期并简单地使用现有的日期比较器?
Date now = new Date()
String stringDate = "10-03-2017"
Date parsedDate= Date.parse("dd-MM-yyyy", stringDate)
if(parsedDate > now) {
...
为了澄清,>
调用java.util.Date&#39; s compareTo()
,只是另一个Groovy语法糖