2013-02-26 14 views
10

Mam datę zdefiniowaną jako "dzień tygodnia, dzień miesiąca, rok" np. Wtorek, 26 lutego 2013Jak wybrać format daty w pliku vm?

Nie wiem, gdzie zdefiniowano datę, ale lubię dodawać godzinę do tego Zmienna $ date lub utwórz zmienną z godziną, czy wiesz, jak mogę umieścić ją w pliku .vm?

Odpowiedz

20

Velocity provides a DateTool class do formatowania dat. trzeba by umieścić instancję tej klasy w swoim kontekście prędkości:

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

Następnie można użyć polecenia formatowania jak:

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

dostać coś Tuesday, February 26, 2013 at 11AM

+0

mogę umieścić ten wiersz na .vm pliku i będę się godzina sformatowany jak chcę? –

+0

Niestety, umieściłem to i po prostu pokazuje "EEE, MMM d, yyyy na ha" zamiast wartości, czy wiesz, co może być? –

+7

Jeśli tak jest, to DateTool nie znajduje się w VelocityContext. Zmodyfikuj kontekst prędkości w następujący sposób w plikach Java: 'context.add (" date ", new DateTool());' –

2

Jednym z wsparcie klas Java musi być wprowadzone do Context. Jeśli chcesz sformatować datę inaczej, możesz to zrobić w tej klasie.

Inną opcją jest umieszczenie surowego obiektu Date w kontekście, a następnie wywołanie metod w szablonie Velocity w celu sformatowania. W razie potrzeby możesz przekazać Apache Commons DateUtils lub inną klasę pomocniczą do szablonu (patrz this answer).

+0

Nie mogę umieścić czegoś na pliku szablonu .vm, który zrobi to, czego potrzebuję? –

+0

Jaki jest typ '$ date'? Jeśli nie jesteś pewien, umieść '$ date.getClass()' w twoim .vm. Jeśli jest to ciąg, to nie, będziesz musiał zrobić formatowanie po stronie Java. Jeśli jest to Data, to tak, możesz wywoływać metody w .vm, aby je sformatować. –

7

Alternatywne rozwiązanie, które nie wymaga dodatkowej zależność lub modyfikację kodu:

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

połączeniu z twoother odpowiedzi.

+0

Nie wiem, co się zmieniło, ale ta sztuczka nie działa z wtyczką maven archetype wykorzystującą Velocity. Mogę nazywać metody niestatyczne w instancji String, ale nie w "formacie". –

+0

@AleksandrKravets Może być odpowiedź Gus tutaj: https://stackoverflow.com/questions/2329191/calling-class-methods-static-from-inside-a-velocity-view-page/15126547#15126547 wyjaśnia to. – hcg

2

Z dokumentacji:

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

nadzieję, że pomoże