JSP定制标记——分析java.util.Locale,根据地区选择显示日期的标记

该博客展示了使用Java和JSP实现自定义日期标签的代码。通过创建NowDateTag类,可根据不同语言和国家设置输出对应格式的日期和星期。在JSP页面中使用该标签,能呈现多种语言版本的日期显示,还对不同Locale设置进行了测试。


package org.eleaf.java.guestbook.tags;

import java.util.*;
import java.text.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;


public class NowDateTag extends TagSupport{
private String prefix = "", language = "", country = "";
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public void setCountry(String country) {
this.country = country;
}
public void setLanguage(String language) {
this.language = language;
}
private String filterLanguage(String language) { //分析请求头Accept-Language
if (language.length() >=2) {
language = language.substring(0,2);
}

return language;
}
public int doStartTag() throws JspException {
try {
Date date = new Date();
Locale locale = new Locale(filterLanguage(language), country);
String nowDate = prefix + " " + getNowDate(date, locale) + " " + getDayOfWeek(date, locale);
pageContext.getOut().println(nowDate);
} catch (Exception e) {
throw new JspException(e);
}
return SKIP_BODY;
}
private String getNowDate(Date date, Locale locale) {
String nowDate = "";
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, locale);
nowDate += df.format(date);
return nowDate;
}
private String getDayOfWeek(Date date, Locale locale) {
Calendar cal = Calendar.getInstance(locale);
cal.setTime(date);
int index = cal.get(Calendar.DAY_OF_WEEK);
DateFormatSymbols symbols = new DateFormatSymbols(locale);
String[] days = symbols.getWeekdays();
return days[index];
}
}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC '-//Sun Microsystems, Inc.//DTD JSP Tag Library
1.2//EN' 'http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd'>

<taglib>
<tlib-version>1.2</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>Html Tags</short-name>
<tag>
<name>nowDate</name>
<tag-class>org.eleaf.java.guestbook.tags.NowDateTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>prefix</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>language</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>country</name>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>

<%@ page contentType="text/html;charset=GBK" %>
<%@ page import="java.util.*" %>
<%@ taglib prefix="htm" uri="/WEB-INF/tlds/html-tag.tld" %>
<htm:nowDate prefix="今天是" language="zh" country="cn" />
<br>
<htm:nowDate prefix="美国版本:" language="en" country="" />
<br>
<htm:nowDate prefix="英国版本:" language="en" country="uk" />
<br>
<htm:nowDate prefix="日本版本:" language="ja" country="jp" />
<br>
<htm:nowDate prefix="台湾地区版本:" language="zh" country="tw" />
<br>
<htm:nowDate prefix="法国版本:" language="fr" country="cn" />
<br>
<htm:nowDate prefix="根据浏览器确定:" language="<%=request.getHeader("Accept-language")%>" country="" />
<br>

<%
Locale loc = new Locale("fr", "cn");
out.println(loc.getDisplayLanguage() + ":" + loc.getDisplayCountry() + "<br>");
loc = new Locale("fr", "fr");
out.println(loc.getDisplayLanguage() + ":" + loc.getDisplayCountry() + "<br>");
loc = new Locale("fr", "错误国家代码");
out.println(loc.getDisplayLanguage() + ":" + loc.getDisplayCountry() + "<br>");
%>

结果:

今天是 2005年2月17日 星期四
美国版本: February 17, 2005 Thursday
英国版本: February 17, 2005 Thursday
日本版本: 2005/02/17 木曜日
台湾地区版本: 2005年2月17日 星期四
法国版本: 17 février 2005 jeudi
根据浏览器确定: 2005年2月17日 星期四
法文:中国
法文:法国
法文:错误国家代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值