本文中主要涉及的类为
Java.util.Date
Java.util.DateFormat
Java.util.Locale
Java.util.TimeZone
首先让我们来熟悉以下Locale类,请看下面的代码:
import
java.util.Locale;


public
class
LocaleTest
...
{


public LocaleTest() ...{

}


public static void main(String[] args) ...{

Locale USLocale=new Locale("en","US");

Locale ChinaLocale=new Locale("zh","CN");

System.out.println(USLocale.getDisplayName(Locale.CHINA));//使用中文显示英语Locale对象的displayName

System.out.println(ChinaLocale.getDisplayName(Locale.US));

}

}
输出结果为:
英文 (美国)
Chinese (China)
Locale类的一个实例通常包含了一个国家的语言信息和国家代码,(语言代码和国家代码的详情请查询下列网址)
Language Code:http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt
Country Code:http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
如何按照各个国家的习惯来展示时间呢?下面的例子可能对你有所启发。
import
java.util.Locale;

import
java.text.DateFormat;

import
java.util.Date;


public
class
LocaleTest
...
{


public LocaleTest() ...{

}


public static void main(String[] args) ...{

Date dt=new Date();

DateFormatdfCN=DateFormat.getDateInstance(DateFormat.FULL,Locale.CHINA);

DateFormat dfUS=DateFormat.getDateInstance(DateFormat.FULL,Locale.US);

System.out.println(dfCN.format(dt));

System.out.println(dfUS.format(dt));

}

}
输出结果为:
2004年12月31日 星期五
Friday, December 31, 2004
TimeZone类的实例包含了一个与格林威治标准时间(GMT)相比较得出的以微秒为单位的时区偏移量,而且它还处理夏令时。那么如何知道TimeZone类支持哪些时区呢呢,这里我写了一个很简单的例子:
输出结果就请大家自己执行后看啦!
import
java.util.Locale;

import
java.util.TimeZone;

import
java.text.DateFormat;

import
java.util.Date;


public
class
LocaleTest
...
{


public LocaleTest() ...{

}


public static voidmain(String[] args) ...{

TimeZonedefaultTimeZone=TimeZone.getDefault();

String []ids=TimeZone.getAvailableIDs();


for(inti=0;i<ids.length;i++)...{

System.out.println(ids[i]);

}

}

}
下面简单介绍一下如何使用TimeZone类。
import
java.util.Locale;

import
java.util.TimeZone;

import
java.text.DateFormat;

import
java.util.Date;



public
class
LocaleTest
...
{


public LocaleTest() ...{

}



public static voidmain(String[] args) ...{


TimeZone defaultTimeZone= TimeZone.getDefault();

TimeZone ChinaTimeZone =TimeZone.getTimeZone("Asia/Chongqing");

TimeZone EuropeTimeZone= TimeZone.getTimeZone("Europe/London");

System.out.println(defaultTimeZone.getDisplayName());

System.out.println(defaultTimeZone.getRawOffset());//计算与格林威治时间的差别

System.out.println(defaultTimeZone.useDaylightTime());

System.out.println("");

System.out.println(ChinaTimeZone.getDisplayName());

System.out.println(ChinaTimeZone.getRawOffset());

System.out.println(ChinaTimeZone.useDaylightTime());

System.out.println("");

System.out.println(EuropeTimeZone.getDisplayName());

System.out.println(EuropeTimeZone.getRawOffset());

System.out.println(EuropeTimeZone.useDaylightTime());

}

}
输出结果为:
中国标准时间
28800000
false
中国标准时间
28800000
false
格林威治时间
0
true
学习到这里,我们可以做这样一件事情,假设我们在英国伦敦有一个公司,在中国重庆有另外一个公司,我们显然需要按照这两个公司所在的时区和地域进行时间的显示。如何实现呢?下面是一段示例代码。
import
java.util.Locale;

import
java.util.TimeZone;

import
java.text.DateFormat;

import
java.util.Date;



public
class
LocaleTest
...
{


public LocaleTest() ...{

}



public static voidmain(String[] args) ...{

Date dt=new Date();

LocaleLondonLocale=Locale.ENGLISH;

LocaleChongqingLocale=Locale.CHINA;

DateFormatLondonDateFormat=DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,LondonLocale);

DateFormatChongqingDateFormat=DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,ChongqingLocale);

System.out.println(LondonLocale.getDisplayName());

System.out.println(LondonDateFormat.format(dt));

System.out.println("");

System.out.println(ChongqingLocale.getDisplayName());

System.out.println(ChongqingDateFormat.format(dt));

}

}
输出结果为:
英文
Friday, December 31, 2004 4:12:07 PM CST
中文 (中国)
2004年12月31日 星期五 下午16时12分07秒 CST