我有一个Velocity模板,变量$facet.name
持有日期。现在我想在这个日期添加一个月。我这样做:
#set( $cal = $Calendar.getInstance.setTime($facet.name) )
$cal
$cal.add($Calendar.MONTH,1)
$cal.getTime.toString
最后3行按原样评估:我得到了
$cal
$cal.add($Calendar.MONTH,1)
$cal.getTime.toString
作为输出。 我该如何正确地做到这一点?
答案 0 :(得分:1)
Java Calendar.setTime(long)返回 void
这一行
#set( $cal = $Calendar.getInstance.setTime($facet.name) )
会尝试将setTime()方法返回的“void value”分配给$ cal ...(虽然我绝对认为,某处应该有关于此的错误消息)
尝试:
#set( $cal = $Calendar.getInstance() )
$cal.setTime($facet.name)
修改强>
我认为没有括号,$ Calendar.getInstance无效。 (Velocity doc说:A VTL Method Body consists of a VTL Identifier followed by an left parenthesis character ("("), followed by an optional parameter list, followed by right parenthesis character (")").
)
另外,请注意:即使您将$Calendar
添加到上下文Calendar.class
,偶数"Calendar"
仍然有效。你只有你放入它的东西(或者工具把它放在你身上使用......)
<强> EDIT2 强>
麻烦的是,它是非常有限 SOLR在Velocity上下文中的含义:
速度背景
对于您尝试做的事情,ComparisonDateTool似乎是合适的......
答案 1 :(得分:1)
从评论中可以看出,您认为可以在速度中使用java代码。事实并非如此。这在jsp和例如jsp中是可能的。 php,但不是速度模板(你知道,这个“不要在你的视图中使用业务逻辑”)。
如果你需要调用一些逻辑,那么
答案 2 :(得分:1)
如果您有DateTool可用,您可以使用它将毫秒直接添加到日期对象,并避免必须一起处理日历对象:
#set ($datePlusOne = $date.toDate($math.add($facet.name.time, 86400000)))
答案 3 :(得分:1)
我想将5天添加到变量中的日期。我尝试了一些东西,下面的代码对我来说很好用
#set($calendar = $date.getCalendar())
$calendar.setTime($myDate)
$calendar.add(6,5)
$date.format('MM/dd/yyyy',$calendar.getTime())
我希望这可以帮助您在给定日期添加/减去任意天数。