2013-02-26 58 views
10

我已定义为$日期“一周中的一天,月日,年”前:周二,2013年2月26日,

我不知道$日期的定义,但我喜欢的时刻加入到这$ date变量,或者用小时创建一个变量,你知道我怎样才能把它放在.vm文件中?

回答

20

Velocity provides a DateTool class用于格式化日期。你需要把这个类的一个实例到你的速度方面:

context.add("date", new DateTool()); 

那么你可以使用一个格式化的命令,如:

$date.format('EEE, MMM d, yyyy at ha', $myDate) 

要达到这样的Tuesday, February 26, 2013 at 11AM

+0

我可以把.vm文件,该行与我去拿小时格式化像我想要的吗? – 2013-02-26 17:18:21

+0

不幸的是,我已经说了,它只是显示“EEE,MMM d,yyyy at ha”而不是值本身,你知道可能是什么吗? – 2013-02-26 17:29:38

+7

如果是这种情况,那么DateTool不在你的VelocityContext中。在你的java文件中编辑你的速度上下文,如下所示:'context.add(“date”,new DateTool());' – 2013-02-26 17:31:33

2

之一支持Java类必须将其放入Context。如果您想以不同的方式格式化日期,则可以在该课程中完成。

另一种选择是将原始Date对象放入上下文中,然后调用Velocity模板中的方法对其进行格式化。如果需要,您可以将Apache Commons DateUtils或其他辅助类也传递给模板(请参阅this answer)。

+0

我不能在.vm模板文件中添加任何东西, – 2013-02-26 17:30:11

+0

'$ date'的类型是什么?如果不确定,请在您的.vm中放置'$ date.getClass()'。如果它是一个字符串,那么不,你必须在Java端进行格式化。如果它是一个日期,那么是的,你可以调用.vm中的方法来格式化它。 – 2013-02-26 18:16:52

7

,不需要额外的依赖性或代码修改替代解决方案:

#set($String = '')## 
$String.format('%1$tY%1$tm%1$td%1$tH%1$tM%1$tS', $date) 

twoother答案组合。

+0

不知道发生了什么变化,但是这个技巧不适用于使用Velocity的maven原型插件。我可以在String实例上调用非静态方法,但不能调用'format'。 – 2017-04-25 11:03:32

+0

@AleksandrKravets可能是Gus在这里的答案:https://stackoverflow.com/questions/2329191/calling-class-methods-static-from-inside-a-velocity-view-page/15126547#15126547解释了这一点。 – hcg 2018-02-28 14:05:38

2

从文档:

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)" 

希望帮助