「JSTLを使って数値データを加工する」では、JSTLのi18nタグライブラリを利用することで数値データをさまざまなパターンに整形する方法について紹介しました。本TIPSでは、同じくi18nタグライブラリを利用して、日付データを加工する方法について紹介することにしましょう。
日付データには、数値データ以上に表記のパターン(和暦/西暦、YYYY年MM月DD日、YYYY/MM/DD、YY-MM-DDなど)が存在しますし、国/地域によっても表記ルールが異なる場合があります。Java基本APIには、こうした日付の整形を行うための専用のjava.text.SimpleDateFormatクラスが用意されていますが、日付を整形するだけのための定型的な操作に、いちいちスクリプトレットを記述しなければならないのは面倒です。しかし、<fmt:formatDate>要素を利用することで、必要なパラメータを属性値として指定するだけでスクリプトレスに日付加工を実現することができます。以下に、<fmt:formatDate>要素を利用した簡単な用例を見てみることにしましょう。
<%@ page contentType="text/html;charset=Windows-31J" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <jsp:useBean id="today" class="java.util.Date" /> <fmt:formatDate value="${today}" type="DATE" dateStyle="FULL" />
<fmt:formatDate>要素は、value属性で指定された値を、その他属性で指定された様式に従って加工し、結果を出力します(注)。上の例の場合、type属性がDATE(日付)なので日付部分のみを、dateStyle属性がFULLなので一番長い形式で、出力します。つまり、上の用例は結果として以下のような出力を生成します。
注:加工の対象となる日付は、value属性の代わりに、<fmt:formatDate>要素配下のテキスト(本体)として指定することも可能です。固定値、または式言語(Expression Language)で表現できる値はvalue属性で、ほかのタグライブラリによる出力結果を利用したい場合には、配下のテキストとして指定するのが通例です。なお、加工結果はそのまま出力するのではなく、var属性を指定することで指定された変数に格納することも可能です(scope属性でスコープの指定も可能)。
2004年12月11日
そのほかにも、<fmt:formatDate>要素にはさまざまな属性が用意されています。以下に主要な属性をまとめておくことにしましょう。
属性 | 概要 | |
---|---|---|
type | データ型(DATE|TIME|BOTH) | |
dateStyle | 日付スタイル(FULL|LONG|MEDIUM|SHORT|DEFAULT) | |
timeStyle | 時刻スタイル(FULL|LONG|MEDIUM|SHORT|DEFAULT) | |
timeZone | タイムゾーン(JSTなど。デフォルトはシステム・デフォルト) | |
type属性によって、表示対象を日付のみ、時刻のみ、日付・時刻双方のいずれかから選択することができます。dateStyle、timeStyle属性は、日付・時刻部分それぞれについて、どのようなスタイル形式で表示するかを選択します。一般的には、これら属性の指定だけでも大部分の用途を賄うことができるはずですが、時として、より複雑な書式を指定したいというケースがあるかもしれません。そのような場合には、pattern属性でカスタムの書式文字列を指定することも可能です。例えば、以下のような使い方をします。
<fmt:formatDate value="${today}" type="DATE" pattern="yyyy年MM月dd日(E) a KK時mm分ss秒" />
この書式文字列の結果は以下のとおりです。
2004年12月11日(土) 午後 00時21分35秒
上記はほんの一例ですが、pattern属性では以下のような書式記述子を組み合わせることで、さまざまなパターンを表現することができます。最後に、pattern属性で利用可能なパターン記述子を挙げておくことにしましょう。
書式記述子 | 概要 | 加工例 | |
---|---|---|---|
G | 紀元 | AD | |
y | 年 | 2004;04 | |
M | 月 | Septenber; Sep; 09 | |
d | 月における日 | 12 | |
E | 曜日 | Friday; Fri | |
w | 年における週 | 10 | |
W | 月における週 | 1 | |
D | 年における日 | 270 | |
F | 月における曜日 | 6 | |
a | 午前/午後 | AM | |
H | 時(0〜23) | 11 | |
k | 時(1〜24) | 11 | |
K | 時(0〜11) | 3 | |
h | 時(1〜12) | 12 | |
m | 分 | 59 | |
s | 秒 | 37 | |
S | ミリ秒 | 420 | |
z | タイムゾーン | Pacific Standard Time; PST; GMT-08:00 | |
Z | タイムゾーン | -800 | |
Copyright © ITmedia, Inc. All Rights Reserved.