将日期对象与 Groovy 中的日期格式字符串进行比较

Comparing Date object to date-formatted String in Groovy

我希望能够在 Groovy 脚本中直接将日期对象与日期格式的字符串进行比较,如下所示:

if ( today > "01-01-2017" & today < "10-03-2017")
    *do something*

为此,我尝试扩展 Date class 以将 compareTo 方法用于 String,例如:

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 进行比较?为什么它不能识别我重写的 compareTo 方法? 帮助表示赞赏。谢谢,

编辑:这个问题被标记为 how to compare a date with current date in groovy 的重复问题。我的问题不一样,因为它是关于如何通过运算符重载将日期对象与日期格式的字符串进行比较。

我认为你把事情复杂化了一点...在一个简单的脚本中更改元类?为什么?

如何将字符串日期解析为日期并仅使用现有的日期比较器?

Date now = new Date()
String stringDate = "10-03-2017"
Date parsedDate= Date.parse("dd-MM-yyyy", stringDate)

if(parsedDate > now) {
...

澄清一下,> 调用了 java.util.Date 的 compareTo(),只是另一个 Groovy 语法糖