如果你的java 程序向处在不同时区或者不同国家的用户显示时间和日期,那么你需要了解java日期类的一些更加高级的方面。在“使用java date和calendar类计算,定制和解析日期”的这篇文章里我们提供了对日期,日期数据的格式化,日期数据的解析和日期计算的一个概览。对于这些概念的深入的理解对于讨论更高级的诸如时区,国际化标准格式和sql日期数据等这些有关日期的问题是关键的。
我们在本文中讨论的类将包含java.text.dateformat,以及java.util.timezone和java.util.locate。我们还将讨论如何使用一个java.util.date的子类java.sql.date来从oracle数据库里提取和保存java日期数据。
地区的问题
在我们国际化我们的日期数据以前,我们需要进一步的学习locale类,也就是java.util.locale。locale类的一个实例通常包含国家和语言信息。其中的每一个部分都是由基于国际标准化组织(iso)制定的国家代码iso-3166和语言代码iso-639的两字符的字符串构成的。
让我们来创建两个locale实例,其中一个对应的是美国英语而另一个对应的是法国法语。见表a。
表a
import java.util.locale;
public class dateexample6 {
public static void main(string[] args) {
// create a locale for the english language in the us.
locale localeen = new locale("en", "us");
system.out.println("display name: " +
localeen.getdisplayname());
system.out.println("country: " + localeen.getcountry());
system.out.println("language: " + localeen.getlanguage());
// create a locale for the french language in france.
locale localefr = new locale("fr", "fr");
system.out.println("/ndisplay name: " +
localefr.getdisplayname());
system.out.println("country: " + localefr.getcountry());
system.out.println("language: " + localefr.getlanguage());
// display the english-us locale in french
system.out.println("/nen display name in french: " +
localeen.getdisplayname(localefr));
}
}
在这个例子中,我们用getdisplayname方法来显示locale的一个更易读的文本。你还应该注意到我们在最后一次调用getdisplayname的时候,我们在对english locale对象调用getdisplayname的时候同时传递了french locale对象。这允许我们选择显示locale对象所用的语言,让我们用英语显示法语locale对象的内容。下面是这个例子的输出:
display name: english (united states)
country: us
language: en
display name: french (france)
country: fr
language: fr
en display name in french: anglais (états-unis)
多个地域的日期格式化
使用java.util.locale和java.text.dateformat类我们就能够格式化日期数据把它显示给在另一个地域的用户,比方法国。表b中的例子为英语和法语各创建了一个完整的日期格式化器。
表 b
import java.util.locale;
import java.util.date;
import java.text.dateformat;
public class dateexample7 {
public static void main(string[] args) {
// get the current system date and time.
date date = new date();
// get a france locale using a locale constant.
locale localefr = locale.france;
// create an english/us locale using the constructor.
locale localeen = new locale("en", "us" );
// get a date time formatter for display in france.
dateformat fulldateformatfr =
dateformat.getdatetimeinstance(
dateformat.full,
dateformat.full,
localefr);
// get a date time formatter for display in the u.s.
dateformat fulldateformaten =
dateformat.getdatetimeinstance(
dateformat.full,
dateformat.full,
localeen);
system.out.println("locale: " + localefr.getdisplayname());
system.out.println(fulldateformatfr.format(date));
system.out.println("locale: " + localeen.getdisplayname());
system.out.println(fulldateformaten.format(date));
}
}
这个例子的输出是:
locale: french (france)
vendredi 5 octobre 2001 21 h 05 gmt-04:00
locale: english (united states)
friday, october 5, 2001 9:05:54 pm edt
注意这个输出包括了时区信息:gmt-04:00 和 pm edt。这个时区是人系统的时区设置里捕获的。你可以看见,日期是以那个地区的用户期望的格式显示的。
闽公网安备 35060202000074号