2016-02-24 21 views
5

Tôi muốn định dạng đối tượng java 8 LocalDateTime của mình theo kiểu "dd.MM.yyyy". Có thư viện nào để định dạng không? Tôi đã thử mã dưới đây nhưng có ngoại lệ hội tụ.Định dạng JSTL LocalDateTime

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

Có thẻ hoặc bộ chuyển đổi nào cho lớp LocalDateTime trong JSTL không?

+1

Xem thêm: https://github.com/sargue/java-time-jsptags –

Trả lời

6

Thực ra tôi đã gặp phải vấn đề tương tự và kết thúc việc rèn các thẻ joda Time jsp ban đầu để tạo Java 8 java.time JSP tags.

Với thư viện mà ví dụ của bạn sẽ là một cái gì đó như thế này:

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

Kiểm tra kho để được hướng dẫn cài đặt: https://github.com/sargue/java-time-jsptags

13

Nó không tồn tại trong JSTL 14 tuổi.

Đặt cược tốt nhất của bạn là tạo một hàm EL tùy chỉnh. Đầu tiên tạo một phương thức tiện ích.

package com.example; 

public final class Dates { 
    private Dates() {} 

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

Sau đó tạo một /WEB-INF/functions.tld trong đó bạn đăng ký phương pháp hữu ích như một chức năng 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> 

Cuối cùng sử dụng nó như dưới đây:

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

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

Mở rộng nếu cần phương pháp để có một Locale đối số.

0

Không, Nó không tồn tại cho LocalDateTime.

Tuy nhiên, bạn có thể sử dụng:

<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

Đây là giải pháp của tôi (Tôi đang sử dụng Spring MVC).

Trong bộ điều khiển thêm một cá thể SimpleDateFormat với mô hình LocalDateTime như một thuộc tính mô hình:

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

Sau đó sử dụng nó trong JSP để phân tích LocalDateTime và có được một java.util.Date:

${localDateTimeFormat.parse(date)} 

Bây giờ bạn có thể phân tích cú pháp bằng JSTL.

Các vấn đề liên quan