2016-02-24 20 views
5

Chcę sformatować mój obiekt LocalDateTime języka Java 8 w postaci "dd.MM.rrrr". Czy istnieje jakaś biblioteka do sformatowania? Próbowałem kodu poniżej, ale otrzymałem wyjątek konwersji.JSTL Format LocalDateTime

<fmt:parseDate value="${date}" pattern="yyyy-MM-dd" var="parsedDate" type="date" /> 

Czy istnieje jakiś znacznik lub konwerter dla klasy LocalDateTime w JSTL?

+1

Zobacz także: https://github.com/sargue/java-time-jsptags –

Odpowiedz

6

Właściwie to miałem ten sam problem i skończyło się na rozwidleniu oryginalnych znaczników JST dla czasu Jatu, aby utworzyć Java 8 java.time JSP tags.

Z tej biblioteki Twój przykład byłoby coś takiego:

<javatime:parseLocalDateTime value="${date}" pattern="yyyy-MM-dd" var="parsedDate" /> 

Sprawdź repozytorium instrukcją montażu: https://github.com/sargue/java-time-jsptags

13

Nie istnieje w 14-letnim JSTL.

Najlepszym rozwiązaniem jest utworzenie niestandardowej funkcji EL. Najpierw utwórz metodę użyteczności.

package com.example; 

public final class Dates { 
    private Dates() {} 

    public static String formatLocalDateTime(LocalDateTime localDateTime, String pattern) { 
     return localDateTime.format(DateTimeFormatter.ofPattern(pattern)); 
    } 
} 

następnie utworzyć /WEB-INF/functions.tld którym zarejestrowaniu sposób użytkowego jako funkcję EL:

<?xml version="1.0" encoding="UTF-8" ?> 
<taglib 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 
    version="2.1"> 

    <tlib-version>1.0</tlib-version> 
    <short-name>Custom_Functions</short-name> 
    <uri>http://example.com/functions</uri> 

    <function> 
     <name>formatLocalDateTime</name> 
     <function-class>com.example.Dates</function-class> 
     <function-signature>java.lang.String formatLocalDateTime(java.time.LocalDateTime, java.lang.String)</function-signature> 
    </function> 
</taglib> 

użyć go poniżej:

<%@taglib uri="http://example.com/functions" prefix="f" %> 

<p>Date is: ${f:formatLocalDateTime(date, 'dd.MM.yyyy')}</p> 

Extend jeśli to konieczne, metodą wziąć Argument Locale.

0

Nie, to nie istnieje dla LocalDateTime.

Jednakże, można użyć:

<fmt:parseDate value="${ cleanedDateTime }" pattern="yyyy-MM-dd'T'HH:mm" var="parsedDateTime" type="both" /> 
<fmt:formatDate pattern="dd.MM.yyyy HH:mm" value="${ parsedDateTime }" /> 
2

Oto moje rozwiązanie (używam MVC wiosny).

W regulatorze dodać SimpleDateFormat wzorkiem LocalDateTime jako atrybut modelu

model.addAttribute("localDateTimeFormat", new SimpleDateFormat("yyyy-MM-dd'T'hh:mm")); 

następnie używać go w JSP do analizowania LocalDateTime i uzyskać java.util.Date:

${localDateTimeFormat.parse(date)} 

Teraz możesz przeanalizować go za pomocą JSTL.