在Velocity模板中添加一个月的日期

时间:2013-09-19 13:24:31

标签: java date velocity

我有一个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

作为输出。 我该如何正确地做到这一点?

4 个答案:

答案 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上下文中的含义:

速度背景

  • esc :Velocity EscapeTool实例
  • 日期:Velocity ComparisonDateTool实例
  • 列表:Velocity ListTool实例
  • 数学:Velocity MathTool实例
  • 数字:Velocity NumberTool实例
  • 页面PageTool个实例。当response是QueryResponse时,仅将页面添加到上下文中。
  • 请求SolrQueryRequest
  • 响应:大部分时间都是QueryResponse,但在某些情况下,QueryResponse不喜欢请求处理程序输出(例如,AnalysisRequestHandler会导致ClassCastException解析“响应” )响应将是SolrResponseBase对象。
  • 排序:Velocity SortTool实例

from SOLR docs

对于您尝试做的事情,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()) 

我希望这可以帮助您在给定日期添加/减去任意天数。