返回介绍

9.6 格式化行为

发布于 2025-04-22 20:10:02 字数 15487 浏览 0 评论 0 收藏

JSTL 提供了格式化和解析数字与日期的标签,它们是 formatNumber、formatDate、timeZone、setTimeZone、parseNumber 和 parseDate。

9.6.1 formatNumber 标签

formatNumber 用于格式化数字。你可以根据需要,利用这个标签的各种属性来获得自己想要的格式。formatNumber 的语法有两种形式。第一种形式没有 body content:

< fmt:formatNumber value="numericValue"
    [type="{number |currency|percent}"] [pattern="customPattern"] [currencyCode="currencyCode"] [currencySymbol="currencySymbol"] [groupingUsed="{true|false}"] [maxIntegerDigits="maxIntegerDigits"] [minIntegerDigits="minIntegerDigits"] [maxFractionDigits="maxFractionDigits"] [minFractionDigits="minFractionDigits"] [var="varName"] [scope="{page|request|session|application}"] />

第二种形式有 body content:

< fmt:formatNumber [type="{number |currency|percent}"] [pattern="customPattern"] [currencyCode="currencyCode"] [currencySymbol="currencySymbol"] [groupingUsed="{true|false}"] [maxIntegerDigits="maxIntegerDigits"] [minIntegerDigits="minIntegerDigits"] [maxFractionDigits="maxFractionDigits"] [minFractionDigits="minFractionDigits"] [var="varName"] [scope="{page|request|session|application}"]> numeric value to be formatted < /fmt:formatNumber>

body content 是 JSP。formatNumber 标签的属性见表 9.8。

表 9.8 formatNumber 标签的属性

属性

类型

描述

value+

字符串或数字

要格式化的数值

type+

字符串

说明该值是要被格式化成数字、货币,还是百分比。这个属性值如下:number、currency 和 percent

pattern+

字符串

定制格式化样式

currencyCode+

字符串

ISO 4217 码,见表 9.9

currencySymbol+

字符串

货币符号

groupingUsed+

布尔

说明输出结果中是否包含组分隔符

maxIntegerDigits+

整数

规定输出结果的整数部分最多几位数字

minIntegerDigits+

整数

规定输出结果的整数部分最少几位数字

maxFractionDigits+

整数

规定输出结果的小数部分最多几位数字

minFractionDigits+

整数

规定输出结果的小数部分最少几位数字

var

字符串

将输出结果存为字符串的有界变量名称

scope

字符串

var 的范围。如果有 scope 属性,则必须指定 var 属性

formatNumber 标签的用途之一就是将数字格式化成货币。为此,可以利用 currencyCode 属性来定义一个 ISO 4217 货币代码。部分 ISO 4217 货币代码见表 9.9。

表 9.9 部分 ISO 4217 货币代码

币别

ISO 4217 码

大单位名称

小单位名称

加拿大元

CAD

加元

人民币

CNY

欧元

EUR

欧元

日元

JPY

日元

英镑

GBP

英镑

便士

美元

USD

美元

美分

FormatNumber 标签的用法范例见表 9.10。

表 9.10 formatNumber 标签的用法范例

行为

结果

<fmt:formatNumber value="12" type="number"/>

12

<fmt:formatNumber value="12" type="number"minIntegerDigits="3"/>

012

<fmt:formatNumber value="12" type="number" minFractionDigits="2"/>

12.00

<fmt:formatNumber value="123456.78" pattern=".000"/>

123456.780

<fmt:formatNumber value="123456.78" pattern="#,#00.0#"/>

123,456.78

<fmt:formatNumber value="12" type="currency"/>

$12.00

<fmt:formatNumber value="12" type="currency" currencyCode="GBP"/>

GBP 12.00

<fmt:formatNumber value="0.12" type="percent"/>

12%

<fmt:formatNumber value="0.125" type="percent"minFractionDigits="2"/>

12.50%

注意,在格式化货币时,如果没有定义 currencyCode 属性,就无法使用浏览器的本地化。

9.6.2 formatDate 标签

formatDate 标签用于格式化日期,其语法如下:

< fmt:formatDate value="date"
    [type="{time|date|both}"]
    [dateStyle="{default|short|medium|long|full}"]
    [timeStyle="{default|short|medium|long|full}"]
    [pattern="customPattern"]
    [timeZone="timeZone"]
    [var="varName"]
    [scope="{page|request|session|application}"]
/>

body content 为 JSP。formatDate 标签的属性见表 9.11。

表 9.11 formatDate 标签的属性

属性

类型

描述

value+

java.util.Date

要格式化的日期和/或时间

type+

字符串

说明要格式化的是时间、日期,还是时间与日期部分都格式化

dataStyle+

字符串

预定义日期的格式化样式,遵循 java.text.DateFormat 中定义的语义

timeStyle+

字符串

预定义时间的格式化样式,遵循 java.text.DateFormat 中定义的语义

pattern+

字符串

定制格式化样式

timezone+

字符串或 java.util.TimeZone

定义用于显示时间的时区

var

字符串

将输出结果存储为字符串的有界变量名称

scope

字符串

var 的范围

timeZone 属性的可能值,请查看 9.6.3 小节。

下列代码利用 formatDate 标签格式化有界变量 now 引用的 java.util.Date 对象。

Default: <fmt:formatDate value="${now}"/>
Short: <fmt:formatDate value="${now}" dateStyle="short"/>
Medium: <fmt:formatDate value="${now}" dateStyle="medium"/>
Long: <fmt:formatDate value="${now}" dateStyle="long"/>
Full: <fmt:formatDate value="${now}" dateStyle="full"/>

下面的 formatDate 标签用于格式化时间:

Default: <fmt:formatDate type="time" value="${now}"/>
Short: <fmt:formatDate type="time" value="${now}"
    timeStyle="short"/>
Medium: <fmt:formatDate type="time" value="${now}"
    timeStyle="medium"/>
Long: <fmt:formatDate type="time" value="${now}" timeStyle="long"/>
Full: <fmt:formatDate type="time" value="${now}" timeStyle="full"/>

下面的 formatDate 标签用于格式化日期和时间:

Default: <fmt:formatDate type="both" value="${now}"/>
Short date short time: <fmt:formatDate type="both"
 value="${now}" dateStyle="short" timeStyle="short"/>
Long date long time format: <fmt:formatDate type="both"
 value="${now}" dateStyle="long" timeStyle="long"/>

下面的 formatDate 标签用于格式化带时区的时间:

Time zone CT: <fmt:formatDate type="time" value="${now}"
    timeZone="CT"/><br/>
Time zone HST: <fmt:formatDate type="time" value="${now}"
    timeZone="HST"/><br/>

下面的 formatDate 标签利用定制模式来格式化日期和时间:

<fmt:formatDate type="both" value="${now}" pattern="dd.MM.yy"/>
<fmt:formatDate type="both" value="${now}" pattern="dd.MM.yyyy"/>

9.6.3 timeZone 标签

timeZone 标签用于定义时区,使其 body content 中的时间信息按指定时区进行格式化或者解析。其语法如下:

< fmt:timeZone value="timeZone">
  body content
< /fmt:timeZone>

body content 是 JSP。属性值可以是类型为 String 或者 java.util.TimeZone 的动态值。美国和加拿大时区的值见表 9.12。

如果 value 属性为 null 或者 empty,则使用 GMT 时区。

下面的范例用 timeZone 标签格式化带时区的日期。

<fmt:timeZone value="GMT+1:00">
  <fmt:formatDate value="${now}" type="both"
      dateStyle="full" timeStyle="full"/>
</fmt:timeZone>
<fmt:timeZone value="HST">
  <fmt:formatDate value="${now}" type="both"
      dateStyle="full" timeStyle="full"/>
</fmt:timeZone>
<fmt:timeZone value="CST">
  <fmt:formatDate value="${now}" type="both"
      dateStyle="full" timeStyle="full"/>
</fmt:timeZone>

表 9.12 美国和加拿大时区的值

缩写

全名

时区

NST

纽芬兰标准时间

UTC-3:30

NDT

纽芬兰夏时制

UTC-2:30

AST

大西洋标准时间

UTC-4

ADT

大西洋夏时制

UTC-3

EST

东部标准时间

UTC-5

EDT

东部夏时制

UTC-4

ET

东部时间,如 EST 或 EDT

*

CST

中部标准时间

UTC-6

CDT

中部夏时制

UTC-5

CT

中部时间,如 CST 或 CDT

*

MST

山地标准时间

UTC-7

MDT

山地夏时制

UTC-6

MT

山地时间,如 MST 或 MDT

*

PST

太平洋标准时间

UTC-8

PDT

太平洋夏时制

UTC-7

PT

太平洋时间,如 PST 或 PDT

*

AKST

阿拉斯加标准时间

UTC-9

AKDT

阿拉斯加夏时制

UTC-8

HST

夏威夷标准时间

UTC-10

9.6.4 setTimeZone 标签

setTimeZone 标签用于将指定时区保存在一个有界变量或者时间配置变量中。setTimeZone 的语法如下:

< fmt:setTimeZone value="timeZone" [var="varName"]
    [scope="{page |request|session|application}"] />

表 9.13 展示了 setTimeZone 标签的属性。

表 9.13 setTimeZone 标签的属性

属性

类型

描述

value+

字符串或 java.util.TimeZone

时区

var

字符串

保存类型为 java.util.TimeZone 的时区的有界变量

scope

字符串

var 的范围或者时区配置变量

9.6.5 parseNumber 标签

parseNumber 标签用于将以字符串表示的数字、货币或者百分比解析成数字。其语法有两种形式。第一种形式没有 body content:

< fmt:parseNumber value="numericValue"
    [type="{number |currency|percent}"] [pattern="customPattern"] [parseLocale="parseLocale"] [integerOnly="{true|false}"] [var="varName"] [scope="{page|request|session|application}"] />

第二种形式有 body content:

< fmt:parseNumber [type="{number |currency|percent}"] [pattern="customPattern"] [parseLocale="parseLocale"] [integerOnly="{true|false}"] [var="varName"] [scope="{page|request|session|application}"]> numeric value to be parsed < /fmt:parseNumber>

body content 是 JSP。parseNumber 标签的属性见表 9.14。

下面的 parseNumber 标签就是解析有界变量 quantity 引用的值,并将结果保存在有界变量 formattedNumber 中。

<fmt:parseNumber var="formattedNumber" type="number"
    value="${quantity}"/>

表 9.14 parseNumber 标签的属性

属性

类型

描述

value+

字符串或数字

要解析的字符串

type+

字符串

说明该字符串是要解析成数字、货币,还是百分比

pattern+

字符串

定制格式化样式,决定 value 属性中的字符串要如何解析

parseLocale+

字符串或者 java.util.Locale

定义 locale,在解析操作期间将其默认格式化样式或将 pattern 属性定义的样式应用其中

integerOnly+

布尔

说明是否只解析指定值的整数部分

var

字符串

保存输出结果的有界变量名称

scope

字符串

var 的范围

9.6.6 parseDate 标签

parseDate 标签以区分地域的格式解析以字符串表示的日期和时间。其语法有两种形式。第一种形式没有 body content:

< fmt:parseDate value="dateString"
    [type="{time|date |both}"] [dateStyle="{default|short|medium|long|full}"] [timeStyle="{default|short|medium|long|full}"] [pattern="customPattern"] [timeZone="timeZone"] [parseLocale="parseLocale"] [var="varName"] [scope="{page|request|session|application}"] />

第二种形式有 body content:

< fmt:parseDate [type="{time|date |both}"] [dateStyle="{default|short|medium|long|full}"] [timeStyle="{default|short|medium|long|full}"] [pattern="customPattern"] [timeZone="timeZone"] [parseLocale="parseLocale"] [var="varName"] [scope="{page|request|session|application}"]> date value to be parsed < /fmt:parseDate>

body content 是 JSP。表 9.15 列出了 parseDate 标签的属性。

表 9.15 parseDate 标签的属性

属性

类型

描述

value+

字符串

要解析的字符串

type+

字符串

说明要解析的字符串中是否包含日期、时间或二者均有

dateStyle+

字符串

日期的格式化样式

timeStyle+

字符串

时间的格式化样式

pattern+

字符串

定制格式化样式,决定要如何解析该字符串

timeZone+

字符串或者 java.util.TimeZone

定义时区,使日期字符串中的时间信息均根据它来解析

parseLocale+

字符串或者 java.util.Locale

定义 locale,在解析操作期间用其默认格式化样式,或将 pattern 属性定义的样式应用其中

var

字符串

保存输出结果的有界变量名称

scope

字符串

var 的范围

下面的 parseDate 标签用于解析有界变量 myDate 引用的日期,并将得到的 java.util.Date 保存在一个页面范围的有界变量 formattedDate 中。

<c:set var="myDate" value="12/12/2005"/>
<fmt:parseDate var="formattedDate" type="date"
    dateStyle="short" value="${myDate}"/>

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。