Groovy 是否将java.util.GregorianCalender转换为java.lang.Integer?

Groovy 是否将java.util.GregorianCalender转换为java.lang.Integer?,groovy,Groovy,Im使用以下脚本/函数(名为getQuarter)获取当前季度的最后一天: Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)/3 * 3 + 2); cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); return cal.getTim

Im使用以下脚本/函数(名为getQuarter)获取当前季度的最后一天:

Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)/3 * 3 + 2);
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
return cal.getTime();
我在触发器中调用这个函数,它应该在每次发生某些事件时设置这个日期:

setAttribute('EffectiveDate', adf.util.getQuarter(today()))
但当触发器开始工作时,会发生以下错误:

表达式“util”全局函数getQuarter2(java.util.Date)中的异常:groovy.lang.MissingMethodException:没有方法签名:java.util.Gregorianalendar.set()适用于参数类型:(java.lang.Integer,java.math.BigDecimal)值:[2,5]可能的解决方案:set(int,int),get(int),set(int,int,int),set(java.util.Map),next(),isSet(int)

我发现它需要将GregorianCalendar类型转换为Integer,但是在我的脚本中我应该如何做到这一点呢?有什么想法吗


Alex

您可以将值强制转换为
int

Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.set(Calendar.MONTH as int, (cal.get(Calendar.MONTH)/3 * 3 + 2) as int);
cal.set(Calendar.DAY_OF_MONTH as int, (cal.getActualMaximum(Calendar.DAY_OF_MONTH)) as int);

如果您使用的是Java8,我可以向您推荐新的Java.time类吗

鉴于今天的日期:

def date = LocalDate.now()
您可以通过以下方式计算季度的最后一天:

int quarter = YearMonth.from(date).get(IsoFields.QUARTER_OF_YEAR)
LocalDate lastDayOfQuater = date.withMonth(quarter * 3).with(TemporalAdjusters.lastDayOfMonth())

好的,这解决了我以前的问题,但现在需要另一个演员?错误是:“无法从类型:java.util.Date创建值为:6/30/18 11:28 AM“@Alwexistwo to java”的类型为:java.sql.Date的对象。什么?好吧,这解决了我以前的问题,但现在需要另一个演员?错误是:“无法从类型:java.util.Date创建类型为:java.sql.Date的对象,其值为:6/30/18 11:28 AMMy函数返回类型“Date”,如果helps@Alwexistwo因此,请思考如何将
java.util.Date
转换为
java.sql.Date