【问题标题】:How to select the format of $date in vm file?如何选择 vm 文件中 $date 的格式?
【发布时间】:2013-02-26 15:03:13
【问题描述】:

我将 $date 定义为“星期几、月份日期、年份”,例如:2013 年 2 月 26 日,星期二

我不知道 $date 是在哪里定义的,但我喜欢将小时添加到这个 $date 变量中,或者创建一个带有小时的变量,你知道如何将它放在 .vm 文件中吗?

【问题讨论】:

    标签: java velocity


    【解决方案1】:

    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的东西

    【讨论】:

    • 我可以将该行放在 .vm 文件中,然后我会得到我想要的小时格式?
    • 不幸的是,我把它放了,它只显示“EEE,MMM d,yyyy at ha”而不是值本身,你知道可能是什么吗?
    • 如果是这种情况,那么 DateTool 不在您的 VelocityContext 中。在你的 java 文件中编辑你的速度上下文:context.add("date", new DateTool());
    【解决方案2】:

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

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

    结合twoother答案。

    【讨论】:

    • 不知道发生了什么变化,但是这个技巧不适用于使用 Velocity 的 maven 原型插件。我可以在 String 实例上调用非静态方法,但不能调用 format
    • @AleksandrKravets 可能是 Gus 的答案:stackoverflow.com/questions/2329191/… 解释了这一点。
    【解决方案3】:

    来自文档:

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

    希望有帮助

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 我不能在 .vm 模板文件中添加一些我需要的东西吗?
      • $date的类型是什么?如果不确定,请将 $date.getClass() 放入您的 .vm。如果它是一个字符串,那么不,你必须在 Java 端进行格式化。如果它是一个日期,那么是的,你可以调用 .vm 中的方法来格式化它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 2012-08-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      相关资源
      最近更新 更多