Calendar.add() 方法采用 int 而非字符串作为字段指示符。要更改月份,您需要 Calendar.MONTH 方法,即 2。
所以你会写:
#set( $startdate = $calendarstart.clone() )
$startdate.add(2, -$minusMonths)
此外,如果您仍在使用 Velocity 1.7,您可能需要编写:
#set( $startdate = $calendarstart.clone() )
#set( $temp = 0 - $minusMonths )
$startdate.add(2, $temp)
要稍微修饰一下这段代码,您可以使用FieldTool,您可以像这样配置它:
<tools>
<toolbox scope="application">
<tool key = "cal"
class="org.apache.velocity.tools.generic.FieldTool"
include="java.util.Date"/>
</toolbox>
</tools>
所以你现在可以写:
#set( $startdate = $calendarstart.clone() )
$startdate = $calendarstart.add($cal.MONTH, -$minusMonths)
(我让你适应 1.7 版本)。
最后一点,请花点时间考虑将此代码移至 Java 工具。VTL 是一种模板语言,您尝试做的似乎更像是一个业务逻辑任务。
(已编辑)如@luis-rico 第一条评论中所述,Calendar.add()
返回 void。Calendar 是一个可变对象,因此如果要保留原始 Calendar 实例,则必须先克隆它。然后您可以直接调用$startdate.add(2, -$minusMonth)
模板,因为不会打印 void 结果。