java高级日期概念 | ||||||||||
如果你的java 程序向处在不同时区或者不同国家的用户显示时间和日期,那么你需要了解java日期类的一些更加高级的方面 。 本文中讨论的类将包含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。
在这个例子中,我们用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中的例子为英语和法语各创建了一个完整的日期格式化器。
这个例子的输出是: 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。这个时区是人系统的时区设置里捕获的。你可以看见,日期是以那个地区的用户期望的格式显示的。让我们等一下来看看时区的概念。 | ||||||||||
时区 timezone类,即java.util.timezone类的实例包含了一个与格林威治标准时间(gmt)相比较得出的以微秒为单位的时区偏移量,而且它还处理夏令时 。要获得一个所有支持的进区的列表,你可以使用方法timezone.getavailableids,它将返回一个包含了所有进区id的字符串数组。要知道关于timezone类的更多细节,可以参看sun公司的web站点。 为了演示这个概念,我们将创建三个时区对象。第一个对象将使用getdefault从系统时钟返回时区数据;第二个和第三个对象将传入一个时区字符串id。见表c中的代码。
其输出如下: eastern standard time rawoffset: -18000000 uses daylight saving: true gmt+00:00 rawoffset: 0 uses daylight saving: true central european standard time rawoffset: 3600000 uses daylight saving: true 正如你所看见的,timezone对象给我们的是原始的偏移量,也就是与gmt相差的微秒数,而且还会告诉我们这个时区是否使用夏令时。有个这个信息,我们就能够继续将时区对象和日期格式化器结合在一起在其它的时区和其它的语言显示时间了。 国际化的时期显示了时区转换 让我们来看一个结合了国际化显示,时区和日期格式化的例子。表d为一个在迈阿密和巴黎拥有办公室的公司显示了当前的完整日期和时间。对于迈阿密的办公室,我们将在每个办公室里用英语显示完整的日期和时间。对于巴黎的办公室,我们将用法语显示完整的当前日期和时间。
|
闽公网安备 35060202000074号