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

Java 在Velocity模板中为日期添加一个月,java,date,velocity,Java,Date,Velocity,我有一个Velocity模板,其中变量$facet.name包含日期。现在我想给这个日期加上一个月。我的做法如下: #set( $cal = $Calendar.getInstance.setTime($facet.name) ) $cal $cal.add($Calendar.MONTH,1) $cal.getTime.toString 最后3行按原样计算:I get $cal $cal.add($Calendar.MONTH,1) $cal.getTime.toString 作为输出。

我有一个Velocity模板,其中变量
$facet.name
包含日期。现在我想给这个日期加上一个月。我的做法如下:

#set( $cal = $Calendar.getInstance.setTime($facet.name) )
$cal
$cal.add($Calendar.MONTH,1)
$cal.getTime.toString
最后3行按原样计算:I get

$cal
$cal.add($Calendar.MONTH,1)
$cal.getTime.toString
作为输出。 我应该如何正确地执行它?

Java返回void

这条线

#set( $cal = $Calendar.getInstance.setTime($facet.name) )
将尝试将setTime()方法返回的“void value”分配给$cal。。。(虽然我肯定认为,应该有一个错误消息)

尝试:

编辑

我认为$Calendar.getInstance没有括号是无效的。(Velocity doc这样说:
VTL方法主体由一个VTL标识符,后跟一个左括号字符(“”),后跟一个可选参数列表,后跟一个右括号字符(“”)。

另外,请注意:只有将
Calendar.class
作为
“Calendar”
添加到上下文中,即使是
$Calendar>也会起作用。你只有你放进去的东西(或者工具放进去供你使用的东西…)

EDIT2

问题是,SOLR在Velocity上下文中的内容非常有限:

速度上下文

  • esc:速度实例
  • 日期:Velocity实例
  • 列表:Velocity实例
  • 数学:速度实例
  • 数字:速度实例
  • 页面:实例。仅当响应为QueryResponse时,页面才会添加到上下文中
  • 请求:a
  • 响应:大多数情况下,但在某些情况下,如果QueryResponse不喜欢请求处理程序输出(例如,AnalysisRequestHandler导致ClassCastException解析“响应”),则响应将是SolrResponseBase对象
  • 排序:一个Velocity实例
()

对于您尝试执行的操作,这个选项似乎是合适的…

Java返回void

这条线

#set( $cal = $Calendar.getInstance.setTime($facet.name) )
将尝试将setTime()方法返回的“void value”分配给$cal。。。(虽然我肯定认为,应该有一个错误消息)

尝试:

编辑

我认为$Calendar.getInstance没有括号是无效的。(Velocity doc这样说:
VTL方法主体由一个VTL标识符,后跟一个左括号字符(“”),后跟一个可选参数列表,后跟一个右括号字符(“”)。

另外,请注意:只有将
Calendar.class
作为
“Calendar”
添加到上下文中,即使是
$Calendar>也会起作用。你只有你放进去的东西(或者工具放进去供你使用的东西…)

EDIT2

问题是,SOLR在Velocity上下文中的内容非常有限:

速度上下文

  • esc:速度实例
  • 日期:Velocity实例
  • 列表:Velocity实例
  • 数学:速度实例
  • 数字:速度实例
  • 页面:实例。仅当响应为QueryResponse时,页面才会添加到上下文中
  • 请求:a
  • 响应:大多数情况下,但在某些情况下,如果QueryResponse不喜欢请求处理程序输出(例如,AnalysisRequestHandler导致ClassCastException解析“响应”),则响应将是SolrResponseBase对象
  • 排序:一个Velocity实例
()


对于您尝试执行的操作,似乎是合适的…

从您认为可以在velocity中使用java代码的注释中可以看出。事实并非如此。这在jsp和php中是可能的,但在velocity模板中是不可能的(您知道,这是“在视图中不使用业务逻辑”的事情)

如果你需要调用一些逻辑,那么

  • 您必须向velocity上下文中添加一个实例,该实例包含您可以在上或上调用方法的内容
  • 您必须使用工具,例如velocity通用工具中的日期工具。信息可在此处找到:

从评论中可以看出,您认为可以在velocity中使用java代码。事实并非如此。这在jsp和php中是可能的,但在velocity模板中是不可能的(您知道,这是“在视图中不使用业务逻辑”的事情)

如果你需要调用一些逻辑,那么

  • 您必须向velocity上下文中添加一个实例,该实例包含您可以在上或上调用方法的内容
  • 您必须使用工具,例如velocity通用工具中的日期工具。信息可在此处找到:

如果您有可用的DateTool,您可以使用它将毫秒直接添加到日期对象,避免同时处理日历对象:

#set ($datePlusOne = $date.toDate($math.add($facet.name.time, 86400000)))

如果您有可用的DateTool,您可以使用它将毫秒直接添加到日期对象中,避免同时处理日历对象:

#set ($datePlusOne = $date.toDate($math.add($facet.name.time, 86400000)))

我想在变量中保存的日期加上5天。我尝试了一些东西,下面的代码对我来说很好

#set($calendar = $date.getCalendar())   
$calendar.setTime($myDate)  
$calendar.add(6,5)  

$date.format('MM/dd/yyyy',$calendar.getTime()) 

我希望这能帮助您在给定日期上加/减任意天数。

我想在变量中保存的日期上加5天。我尝试了一些东西,下面的代码对我来说很好

#set($calendar = $date.getCalendar())   
$calendar.setTime($myDate)  
$calendar.add(6,5)  

$date.format('MM/dd/yyyy',$calendar.getTime()) 

我希望这将帮助您在给定日期上增加/减少任意天数。

请不要在模板中实现业务逻辑!正确地在Java端进行计算,并将其添加到上下文中。您会感谢自己:调试写入模板的代码是非常痛苦的。另外,使用名为
$facet.name
的变量来保存日期也是我非常感兴趣的事情。我正在玩Solr