2016-02-24 20 views
5

Ich möchte mein Java 8 LocalDateTime Objekt in "dd.MM.yyyy" Muster formatieren. Gibt es eine zu formatierende Bibliothek? Ich habe den Code unten ausprobiert, habe aber eine Konvertierungsausnahme erhalten.JSTL LocalDateTime Format

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

Gibt es ein Tag oder einen Konverter für die LocalDateTime-Klasse in JSTL?

+1

Siehe auch: https://github.com/sargue/java-time-jsptags –

Antwort

6

Eigentlich hatte ich das gleiche Problem und landete die ursprüngliche Joda Time JSP-Tags Forking Java 8 java.time JSP tags.

Mit dieser Bibliothek würde Ihr Beispiel so etwas wie dieses:

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

Überprüfen Sie die Repository-Installationsanweisungen: https://github.com/sargue/java-time-jsptags

13

Es existiert nicht in der 14 Jahre alten JSTL.

Ihre beste Wette ist das Erstellen einer benutzerdefinierten EL-Funktion. Erstellen Sie zuerst eine Hilfsmethode.

package com.example; 

public final class Dates { 
    private Dates() {} 

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

Erstellen Sie dann ein /WEB-INF/functions.tld wobei Sie die Dienstprogramm Methode als eine EL-Funktion registrieren:

<?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> 

es schließlich, wie unten verwenden:

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

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

verlängern, wenn notwendig, das Verfahren ein nehmen Locale Argument.

0

Nein, es ist nicht für Local existieren.

Sie können jedoch verwenden:

<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

Hier meine Lösung ist (ich bin mit Spring MVC).

In der Steuerung ein Simple mit dem Local Muster als Modell Attribut hinzufügen:

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

es dann in der JSP verwendet die Local zu analysieren und eine java.util.Date erhalten:

${localDateTimeFormat.parse(date)} 

Jetzt können Sie es mit JSTL analysieren.