在Groovy中将Date对象与日期格式的String进行比较

时间:2017-03-01 12:46:08

标签: date groovy operator-overloading dsl

我希望能够直接将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进行比较。

1 个答案:

答案 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语法糖