动态数据的国际化

 
数值,货币,时间,日期等数据由于可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。
Java 中提供了解决这些问题的 API 类(位于 java.util 包和 java.text 包中)
 
  1.Locale 类
    •Locale 实例对象代表一个特定的地理,政治、文化区域。
•一个 Locale 对象本身不会验证它代表的语言和国家地区信息是否正确,只是向本地敏感的类提供国家地区信息,与国际化相关的格式化和解析任务由本地敏感的类去完成。
(若JDK中的某个类在运行时需要根据 Locale 对象来调整其功能,这个类就称为本地敏感类)
 
  2.java.text.DateFormat类
    
    DateFormat 类可以将一个日期/时间对象格式化为表示某个国家地区的日期/时间字符串,项目中不提倡用Date类型。
    DateFormat 类除了可按国家地区格式化输出日期外,它还定义了一些用于描述日期/时间的显示模式的 int 型的常量,
    包括FULL, LONG, MEDIUM, DEFAULT, SHORT,实例化DateFormat对象时,可以使用这些常量,控制日期/时间的显示长度。
 
    
     中文:

short:11-11-1
default:2011-11-1
medium:2011-11-1
long:2011年11月1日
full:2011年11月1日 星期二

英文:
  short:11/1/11
  default:Nov 1, 2011
  medium:Nov 1, 2011
  long:November 1, 2011
  full:Tuesday, November 1, 2011

    DateFormat 对象的方法:
•format: 将日期/时间对象格式化为符合某个本地环境习惯的字符串。
•parse:将符合某个本地环境习惯的日期/时间字符串解析为日期/时间对象
•注意:parse和format完全相反,一个是把date时间转化为相应地区和国家的显示样式,一个是把相应地区的时间日期转化成date对象,该方法在使用时,解析的时间或日期要符合指定的国家、地区格式,否则会抛异常。
•解析:2010年9月33日有异常吗?不会抛异常,会显示不正确。
      
    DateFormat对象通常不是线程安全的,每个线程都应该创建自己的 DateFormat实例对象,ThreadLocal<DateFormat>
 1 import java.text.DateFormat;
 2 import java.text.ParseException;
 3 import java.util.Date;
 4 import java.util.Locale;
 5 
 6 public class Demo1 {
 7     public static void main(String[] args) throws ParseException {
 8         
 9         /*DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.US);
10         DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.US);
11         System.out.println(df.format(new Date()));*/
12         /*DateFormat  df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.CHINA);
13         System.out.println(df.format(new Date()));*/
14         
15         String str = "2011年11月33日 星期二";
16         DateFormat df = DateFormat.getDateInstance(DateFormat.FULL,Locale.CHINA);
17         Date date = df.parse(str);
18         System.out.println(df.format(date));
19     } 
20 }

   Date->Calendar(日历)->DateFormat->SimpleDateFormat 

 1 import java.text.SimpleDateFormat;
 2 import java.util.Calendar;
 3 import java.util.Date;
 4 import java.util.Locale;
 5 
 6 //演示SimpleDateFormat和Calendar的用法
 7 public class Demo2 {
 8     public static void main(String[] args) throws Exception {
 9         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd",Locale.CHINA);
10         Date date = sdf.parse("2011-11-1");
11         Calendar c = Calendar.getInstance(Locale.CHINA);
12         c.setTime(date);
13         System.out.println(c.get(Calendar.YEAR)+"年");
14         System.out.println(c.get(Calendar.MONTH)+1+"月");
15         System.out.println(c.get(Calendar.DATE)+"日");
16         System.out.println(c.get(Calendar.DAY_OF_WEEK));//1(星期天)
17         System.out.println(c.get(Calendar.DAY_OF_MONTH));//1
18         System.out.println(c.get(Calendar.DAY_OF_YEAR));//
19     }
20 }

 

    
 1  <%
 2   TimeZone tz = TimeZone.getDefault();
 3   pageContext.setAttribute("tz",tz);
 4   %>
 5   <jsp:useBean id="now" class="java.util.Date" scope="page"/>
 6   中国
 7   <fmt:timeZone value="${tz}">
 8   <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full"/>
 9   </fmt:timeZone>
10   <hr/>
11   美国
12   <fmt:timeZone value="GMT-06:00">
13   <fmt:formatDate value="${now}" type="both" dateStyle="full" timeStyle="full"/>
14   </fmt:timeZone>    
15   <br/>
16 <fmt:formatDate value="${now}" pattern="yyyy/MM/dd hh:mm:ss" 
17                            timeZone="GMT-06:00"/>  

 

 
 

 

posted @ 2013-04-14 13:24  hacket520  阅读(500)  评论(0编辑  收藏  举报