2013-02-26 6 views
10

Ich habe ein $ date definiert als "Tag der Woche, Monat Tag, Jahr" ex: Dienstag, 26. Februar 2013

Ich weiß nicht wo $ Datum definiert ist, aber ich möchte die Stunde hinzufügen $ date Variable, oder erstellen Sie eine Variable mit der Stunde, wissen Sie, wie kann ich es in die .vm-Datei einfügen?

Antwort

20

Velocity provides a DateTool class zum Formatieren von Daten. Sie müssten eine Instanz dieser Klasse in Ihre Geschwindigkeit Kontext setzen:

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

Dann könnten Sie wie ein Formatierungsbefehl verwenden:

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

zu bekommen so etwas wie Tuesday, February 26, 2013 at 11AM

+0

hilft ich diese Zeile auf .vm Datei setzen kann und ich die Stunde formated erhalten werden wie ich will? –

+0

Leider habe ich das und es zeigt nur "EEE, MMM d, yyyy at ha" anstelle der Werte selbst, weißt du was sein könnte? –

+7

Wenn dies der Fall ist, ist ein DateTool nicht in Ihrem VelocityContext. Bearbeiten Sie Ihren Geschwindigkeitskontext wie folgt in Ihren Java-Dateien: 'context.add (" date ", new DateTool());' –

2

Einer der Backing-Java-Klassen müssen es in die Context setzen. Wenn Sie das Datum anders formatieren möchten, können Sie dies in dieser Klasse tun.

Eine weitere Option wäre, das rohe Date-Objekt in den Kontext einzufügen und Methoden in der Velocity-Vorlage aufzurufen, um es zu formatieren. Bei Bedarf können Sie auch Apache Commons DateUtils oder eine andere Hilfsklasse an die Vorlage übergeben (siehe this answer).

+0

Kann ich nicht etwas in die .vm Template-Datei einfügen, die das tut, was ich brauche? –

+0

Was ist der Typ von $ date? Wenn Sie sich nicht sicher sind, setzen Sie '$ date.getClass()' in Ihr .vm. Wenn es sich um einen String handelt, dann müssen Sie die Formatierung auf der Java-Seite vornehmen. Wenn es sich um ein Datum handelt, dann können Sie Methoden in der .vm aufrufen, um sie zu formatieren. –

7

Alternative Lösung, die keine zusätzliche Abhängigkeit oder Code-Änderung erfordert:

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

von twoother Antworten zusammengefasst.

+0

Ich weiß nicht, was sich geändert hat, aber dieser Trick funktioniert nicht mit maven archetype plugin, das Velocity verwendet. Ich kann nicht-statische Methoden auf String-Instanz aufrufen, aber nicht 'format'. –

+0

@AleksandrKravets Kann die Antwort von Gus hier sein: https://stackoverflow.com/questions/2329191/calling-class-methods-static-from-inside-a-velocity-view-page/15126547#15126547 erklärt dies. – hcg

2

Aus der Dokumentation:

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

Hoffnung, die