Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 在groovy中,我可以在一个日期范围内调用get(I)或getFrom()吗?_Date_Groovy_Range - Fatal编程技术网

Date 在groovy中,我可以在一个日期范围内调用get(I)或getFrom()吗?

Date 在groovy中,我可以在一个日期范围内调用get(I)或getFrom()吗?,date,groovy,range,Date,Groovy,Range,我有一个方法需要groovy中的一个范围,并且我在传入类似 新日期(“1999年1月1日”)…新日期(“1999年1月1日”) 但我更愿意在一个日期内通过(作为范围) 当我把它打印出来时,它看起来不错 范围=起始日期作为范围 这将显示在控制台中 [1999年1月1日星期五00:00:00 CST] 但现在,当我尝试执行.get(I)或.getFrom()时,它没有说 groovy.lang.MissingMethodException: No signature of method: java.

我有一个方法需要groovy中的一个范围,并且我在传入类似

新日期(“1999年1月1日”)…新日期(“1999年1月1日”)

但我更愿意在一个日期内通过(作为范围)

当我把它打印出来时,它看起来不错

范围=起始日期作为范围

这将显示在控制台中

[1999年1月1日星期五00:00:00 CST]

但现在,当我尝试执行.get(I)或.getFrom()时,它没有说

groovy.lang.MissingMethodException: No signature of method: java.util.Date.getFrom() is applicable for argument types: () values: []
Possible solutions: getDate(), getDay(), getTime(), getYear(), before(java.util.Date), getAt(int)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:54)
    at org.codehaus.groovy.runtime.InvokerHelper$invokeMethod.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
    at Date_delegateProxy.getFr

任何人在groovy中尝试强制转换并使用单个日期作为范围都会成功吗?

在groovy中,
as
操作符调用对象上的
asType
方法,并将其转换为类作为参数。提供我所知道的Groovy附带的所有实现,其中没有一个转换为Range

如果你需要重写Atype来支持范围,但是我想大多数人会考虑滥用操作符重载和这样的拙劣实践,我实际上很犹豫提供一个例子。尽管如此,这应该符合你的要求

// Save the original asType method so that it can be called by the overridden one
final f = Date.metaClass.getMetaMethod('asType', [Class] as Class[])

// Replace the default asType method for Date objects
Date.metaClass.asType = { final Class it ->
    // For ranges convert the date into a range with the date as both the start
    // and end. For other types, use the default implementation of asType
    return it == Range? (delegate..delegate) : f.invoke(delegate, it)
}

final start = new Date()
final end   = start

assert start..end == start as Range