`

JSP定制标记——分析java.util.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日 星期四
法文:中国
法文:法国
法文:错误国家代码

分享到:
评论

相关推荐

    java.util.Date与java.sql.Date互转及字符串转换为日期时间格式.docx

    ### Java.util.Date与Java.sql.Date互转及字符串转换为日期时间格式 #### 一、Java.util.Date与Java.sql.Date的基本概念 在Java编程语言中,处理日期和时间时经常使用到`java.util.Date`和`java.sql.Date`这两个类...

    java.util.Date与java.sql.Date相互转换

    ### Java.util.Date与Java.sql.Date相互转换 #### 知识点概述 在Java开发中,经常需要处理日期和时间相关的操作。Java标准库提供了两个重要的日期类:`java.util.Date` 和 `java.sql.Date`。虽然它们名字相似,但...

    用java.util.zip包现数据压缩与解压

    ### 使用 Java.util.zip 包实现数据压缩与解压 在计算机科学领域,数据压缩技术是一项重要的功能,它能够帮助减少存储空间的需求以及提高网络传输效率。本文将通过一系列的示例来详细介绍如何利用 Java 中的 `java....

    java并发工具包 java.util.concurrent中文版用户指南pdf

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException)

    "java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError" 是一个典型的错误提示,它表明在并发执行过程中遇到了内存不足的问题。下面我们将深入探讨这个问题的原因、影响以及如何解决。 内存溢出...

    java.util包

    Java提供日期(Data)类、日历(Calendar)类,随机数(Random)类,堆栈(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构

    java.sql.date与java.util.date.pdf

    Java编程语言提供了多种日期时间类来处理不同的场景需求,其中`java.util.Date`和`java.sql.Date`是两个常见的日期类型,它们之间存在一定的差异和转换关系。 `java.util.Date`是Java标准库中的基础日期类,它表示...

    java.sql.与java.util

    Java编程语言提供了两个重要的日期处理类,分别是`java.util.Date`和`java.sql.Date`,它们在处理日期和时间上有着不同的特性和用途。 `java.util.Date`是更通用的日期时间类,它包含了日期和时间的信息,可以精确...

    java.util.logging.Logger使用详解

    ### Java.util.logging.Logger 使用详解 #### 一、创建Logger对象 在Java中,`java.util.logging.Logger` 是标准的日志框架之一,它提供了基础的日志记录功能。为了使用这一功能,首先需要获得 `java.util.logging...

    java.util.Date到Json日期

    ### Java.util.Date到JSON日期转换详解 在Java中处理日期并将其转换为JSON格式是常见的需求,尤其是在进行网络传输或存储操作时。本篇文章将详细介绍如何将`java.util.Date`对象转换为符合特定格式的JSON字符串,...

    java.util.Date与java.sql.Date互转及字符串转换为日期时间格式[文].pdf

    java.util.Date和java.sql.Date是两个不同的日期时间类,需要根据实际情况选择正确的使用场景。理解它们之间的区别和互转方式是非常重要的。在进行数据库操作时,需要注意java.sql.Date的规范化问题,以免数据截取。...

    java API 在包java.util中有一个GregorianCalendar类,使用它可以得到一年内某个月的日历.zip

    Java API中的`java.util.GregorianCalendar`类是用于处理日期和时间的重要工具,它提供了丰富的功能来满足各种日历操作需求。这个类是基于格里高利历(公历)的,是Java中最常用的日期时间类之一。在给定的压缩包...

    java.util包总结

    10. ResourceBundle类:用于加载和管理本地化资源,便于应用程序根据不同地区的语言和文化习惯显示内容。 11. EnumSet和EnumMap:针对枚举类型(enum)的高效集合实现,优化了枚举操作。 12. WeakHashMap:键使用...

    java.util.TimeZone 的世界时区列表

    通过上述分析可以看出,`java.util.TimeZone`提供了丰富的时区信息,这对于实现跨时区的数据处理和时钟同步等功能至关重要。开发者可以根据实际需求选择合适的时区标识符,并利用Java提供的API进行时区相关的操作,...

Global site tag (gtag.js) - Google Analytics