将java.util.GregorianCalender转换为java.lang.Integer?

时间:2018-04-12 10:36:11

标签: groovy

我使用以下脚本/函数(名为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.GregorianCalendar.set()适用于参数类型:(java.lang .Integer,java.math.BigDecimal)values:[2,5]可能的解决方案:set(int,int),get(int),set(int,int,int),set(java.util.Map),next (),isSet(int)

我发现它需要将GregorianCalendar类型转换为Integer,但我应该如何在我的脚本中执行此操作?有什么想法吗?

亚历

2 个答案:

答案 0 :(得分:1)

您可以将值转换为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);

答案 1 :(得分:0)

如果您使用的是Java 8,我可以向您推荐新的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())