我有一个$ date定义为"星期几,月日,年",例如:2013年2月26日,星期二
我不知道$ date的定义位置,但是我想将小时添加到$ date变量中,或者用小时创建一个变量,您知道如何将其放入.vm文件吗?
Velocity提供了DateTool类来格式化日期。 您需要将此类的实例放入您的速度上下文中:
context.add("date", new DateTool());
然后,您可以使用如下格式命令:
$date.format('EEE, MMM d, yyyy at ha', $myDate)
得到类似Tuesday, February 26, 2013 at 11AM的东西
我可以把那行放在.vm文件上,这样我会得到小时格式,就像我想要的吗?
不幸的是,我已经指出了这一点,而只是显示" EEE,MMM d,yyyy在ha"而不是值本身,您知道可能是什么吗?
如果是这种情况,则DateTool不在您的VelocityContext中。 在Java文件中像这样编辑您的力度上下文:context.add("date", new DateTool());
不需要其他依赖项或代码修改的替代解决方案:
#set( $String = '' )##
$String.format('%1$tY%1$tm%1$td%1$tH%1$tM%1$tS', $date)
结合其他两个答案。
不知道发生了什么变化,但是此技巧不适用于使用Velocity的Maven原型插件。 我可以在String实例上调用非静态方法,但不能在format上调用。
@AleksandrKravets可能是Gus的答案:stackoverflow.com/questions/2329191/对此进行了解释。
从文档中:
Symbol Meaning Presentation Example
------ ------- ------------ -------
G era designator (Text) AD
y year (Number) 1996
M month in year (Text & Number) July & 07
d day in month (Number) 10
h hour in am/pm (1~12) (Number) 12
H hour in day (0~23) (Number) 0
m minute in hour (Number) 30
s second in minute (Number) 55
S millisecond (Number) 978
E day in week (Text) Tuesday
D day in year (Number) 189
F day of week in month (Number) 2 (2nd Wed in July)
w week in year (Number) 27
W week in month (Number) 2
a am/pm marker (Text) PM
k hour in day (1~24) (Number) 24
K hour in am/pm (0~11) (Number) 0
z time zone (Text) Pacific Standard Time
' escape for text (Delimiter)
'' single quote (Literal) '
Examples:"E, MMMM d" will result in"Tue, July 24"
"EEE, M-d (H:m)" will result in"Tuesday, 7-24 (14:12)"
希望能有所帮助
支持的Java类之一必须将其放入Context中。 如果要更改日期格式,可以在该类中进行设置。
另一种选择是将原始Date对象放入上下文中,然后调用Velocity模板中的方法对其进行格式化。 如果需要,您也可以将Apache Commons DateUtils或其他帮助程序类传递给模板(请参见此答案)。
不能在.vm模板文件上放一些东西来满足我的需要?
$date是什么类型? 如果不确定,请在您的.vm中放入$date.getClass()。 如果它是一个字符串,则为否,则必须在Java端进行格式化。 如果它是一个日期,则可以,您可以调用.vm中的方法对其进行格式化。