web-dev-qa-db-ja.com

JSTL LocalDateTime形式

Java 8 LocalDateTimeオブジェクトを"dd.MM.yyyy"パターンでフォーマットします。フォーマットするライブラリはありますか?コードを試しました以下ですが、変換例外が発生しました。

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

JSTLにLocalDateTimeクラスのタグまたはコンバーターはありますか?

11
Ugur Artun

実際、同じ問題があり、元のJoda Time jspタグをフォークして Java 8 Java.time JSPタグ を作成することになりました。

そのライブラリを使用すると、例は次のようになります。

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

リポジトリでインストール手順を確認します。 https://github.com/sargue/Java-time-jsptags

11
sargue

14歳のJSTLには存在しません。

あなたの最善の策は、カスタムEL関数を作成することです。最初にユーティリティメソッドを作成します。

package com.example;

public final class Dates {
     private Dates() {}

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

次に、/WEB-INF/functions.tldここで、ユーティリティメソッドを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>

最後に次のように使用します。

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

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

必要に応じてメソッドを拡張し、Locale引数を取ります。

22
BalusC

いいえ、LocalDateTimeには存在しません。

ただし、次のものを使用できます。

<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 }" />
7
egemen

これが私の解決策です(私はSpring MVCを使用しています)。

コントローラーで、モデル属性としてLocalDateTimeパターンを使用してSimpleDateFormatを追加します。

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

次に、JSPでそれを使用してLocalDateTimeを解析し、Java.util.Dateを取得します。

${localDateTimeFormat.parse(date)}

これで、JSTLで解析できます。

5
aleric

_Java.time.format.DateTimeFormatter_の使用をお勧めします。まず、JSP _<%@ page import="Java.time.format.DateTimeFormatter" %>_にインポートしてから、変数${localDateTime.format( DateTimeFormatter.ofPattern("dd.MM.yyyy"))}をフォーマットします。 Java開発に不慣れなので、このアプローチが「ベストプラクティス」の観点から受け入れられるかどうかに興味があります。

1