JAVA网页设计Java初级日期观点 (献给那些要国际化时...
手机用到的是用j2me所编出来的小程序。观点|初级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。
表A
importjava.util.Locale;
publicclassDateExample6{
publicstaticvoidmain(String[]args){
//CreatealocalefortheEnglishlanguageintheUS.
LocalelocaleEN=newLocale("en","US");
System.out.println("DisplayName:"+
localeEN.getDisplayName());
System.out.println("Country:"+localeEN.getCountry());
System.out.println("Language:"+localeEN.getLanguage());
//CreatealocalefortheFrenchlanguageinFrance.
LocalelocaleFR=newLocale("fr","FR");
System.out.println("
DisplayName:"+
localeFR.getDisplayName());
System.out.println("Country:"+localeFR.getCountry());
System.out.println("Language:"+localeFR.getLanguage());
//DisplaytheEnglish-USlocaleinFrench
System.out.println("
enDisplayNameinFrench:"+
localeEN.getDisplayName(localeFR));
}
}
在这个例子中,我们用getDisplayName办法来显现Locale的一个更容易读的文本。你还应当注重到我们在最初一次挪用getDisplayName的时分,我们在对EnglishLocale对象挪用getDisplayName的时分同时传送了FrenchLocale对象。这同意我们选择显现Locale对象所用的言语,让我们用英语显现法语Locale对象的内容。上面是这个例子的输入:
DisplayName:English(UnitedStates)
Country:US
Language:en
DisplayName:French(France)
Country:FR
Language:fr
enDisplayNameinFrench:anglais(états-Unis)
多个地区的日期格局化
利用java.util.Locale和java.text.DateFormat类我们就可以够格局化日期数据把它显现给在另外一个地区的用户,例如法国。表B中的例子为英语和法语各创立了一个完全的日期格局化器。
表B
importjava.util.Locale;
importjava.util.Date;
importjava.text.DateFormat;
publicclassDateExample7{
publicstaticvoidmain(String[]args){
//Getthecurrentsystemdateandtime.
Datedate=newDate();
//GetaFrancelocaleusingaLocaleconstant.
LocalelocaleFR=Locale.FRANCE;
//CreateanEnglish/USlocaleusingtheconstructor.
LocalelocaleEN=newLocale("en","US");
//GetadatetimeformatterfordisplayinFrance.
DateFormatfullDateFormatFR=
DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL,
localeFR);
//GetadatetimeformatterfordisplayintheU.S.
DateFormatfullDateFormatEN=
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)
vendredi5octobre200121h05GMT-04:00
Locale:English(UnitedStates)
Friday,October5,20019:05:54PMEDT
注重这个输入包含了时区信息:GMT-04:00和PMEDT。这个时区是人体系的时区设置里捕捉的。你能够瞥见,日期是以谁人区域的用户希冀的格局显现的。让我们等一上去看看时区的观点。
时区
TimeZone类,即java.util.TimeZone类的实例包括了一个与格林威治本定时间(GMT)比拟较得出的以微秒为单元的时区偏移量,并且它还处置夏令时
。要取得一个一切撑持的进区的列表,你可使用办法TimeZone.getAvailableIDs,它将前往一个包括了一切进区ID的字符串数组。要晓得关于TimeZone类的更多细节,能够参看Sun公司的Web站点。
为了演示这个观点,我们将创立三个时区对象。第一个对象将利用getDefault从体系时钟前往时区数据;第二个和第三个对象将传进一个时区字符串ID。见表C中的代码。
表C
importjava.util.TimeZone;
importjava.util.Date;
importjava.text.DateFormat;
importjava.util.Locale;
publicclassDateExample8{
publicstaticvoidmain(String[]args){
//Getthesystemtimezone.
TimeZonetimeZoneFL=TimeZone.getDefault();
System.out.println("
"+timeZoneFL.getDisplayName());
System.out.println("RawOffset:"+timeZoneFL.getRawOffset());
System.out.println("Usesdaylightsaving:"+timeZoneFL.useDaylightTime());
TimeZonetimeZoneLondon=TimeZone.getTimeZone("Europe/London");
System.out.println("
"+timeZoneLondon.getDisplayName());
System.out.println("RawOffset:"+timeZoneLondon.getRawOffset());
System.out.println("Usesdaylightsaving:"+timeZoneLondon.useDaylightTime());
TimeZonetimeZoneParis=TimeZone.getTimeZone("Europe/Paris");
System.out.println("
"+timeZoneParis.getDisplayName());
System.out.println("RawOffset:"+timeZoneParis.getRawOffset());
System.out.println("Usesdaylightsaving:"+timeZoneParis.useDaylightTime());
}
}
其输入以下:
EasternStandardTime
RawOffset:-18000000
Usesdaylightsaving:true
GMT+00:00
RawOffset:0
Usesdaylightsaving:true
CentralEuropeanStandardTime
RawOffset:3600000
Usesdaylightsaving:true
正如你所瞥见的,TimeZone对象给我们的是原始的偏移量,也就是与GMT相差的微秒数,并且还会告知我们这个时区是不是利用夏令时。有个这个信息,我们就可以够持续将时区对象和日期格局化器分离在一同在别的的时区和别的的言语显现工夫了。
国际化的时代显现了时区转换
让我们来看一个分离了国际化显现,时区和日期格局化的例子。表D为一个在迈阿密和巴黎具有办公室的公司显现了以后的完全日期和工夫。关于迈阿密的办公室,我们将在每一个办公室里用英语显现完全的日期和工夫。关于巴黎的办公室,我们将用法语显现完全确当前日期和工夫。
表D
importjava.util.TimeZone;
importjava.util.Date;
importjava.util.Locale;
importjava.text.DateFormat;
publicclassDateExample9{
publicstaticvoidmain(String[]args){
LocalelocaleEN=Locale.US;
LocalelocaleFrance=Locale.FRANCE;
TimeZonetimeZoneMiami=TimeZone.getDefault();
TimeZonetimeZoneParis=TimeZone.getTimeZone("Europe/Paris");
DateFormatdateFormatter=DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL,
localeEN);
DateFormatdateFormatterParis=DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL,
localeFrance);
DatecurDate=newDate();
System.out.println("DisplayforMiamioffice.");
//PrinttheMiamitimezonedisplaynameinEnglish
System.out.println(timeZoneMiami.getDisplayName(localeEN));
//SetthetimezoneofthedateFormattertoMiamitimezone.
dateFormatter.setTimeZone(timeZoneMiami);
//Printtheformatteddate.
System.out.println(dateFormatter.format(curDate));
//SetthetimezoneofthedateformattertoParistimezone.
dateFormatter.setTimeZone(timeZoneParis);
//PrinttheParistimezonedisplaynameinEnglish.
System.out.println(timeZoneParis.getDisplayName(localeEN));
//PrinttheParistimeinenglish.
System.out.println(dateFormatter.format(curDate));
System.out.println("
DisplayforParisoffice.");
//PrinttheMiamitimezonedisplaynameinFrench
System.out.println(timeZoneMiami.getDisplayName(localeFrance));
//Setthetimezoneofthe
//dateFormatterParistoMiamitimezone.
dateFormatterParis.setTimeZone(timeZoneMiami);
//PrinttheformatteddateinFrench.
System.out.println(dateFormatterParis.format(curDate));
//SetthetimezoneofthedateformattertoParistimezone.
dateFormatterParis.setTimeZone(timeZoneParis);
//PrinttheParistimezonedisplaynameinFrench.
System.out.println(timeZoneParis.getDisplayName(localeFrance));
//PrinttheParistimeinFrench.
System.out.println(dateFormatterParis.format(curDate));
}
}
这个例子的输入是:
DisplayforMiamioffice.
EasternStandardTime
Friday,October5,200110:28:02PMEDT
CentralEuropeanStandardTime
Saturday,October6,20014:28:02AMCEST
DisplayforParisoffice.
GMT-05:00
vendredi5octobre200122h28GMT-04:00
GMT+01:00
samedi6octobre200104h28GMT+02:00
在一个SQL数据库中保留和提取日期数据
我们将要利用的下一个类是java.sql.Date,它是java.util.Date的子类但它利用了Java数据库毗连(JDBC)办法
。让我们来看一个复杂的只要一个表单--LAST_ACCESS的ORACLE数据库,它是用上面的SQL创立的:
createtableLAST_ACCESS(
LAST_HITdate
);
这个表单只要一个纪录,用上面的拔出语句创立:
insertintoLAST_ACCESSvalues(Sysdate);
表E演示了怎样修正和提取LAST_HIT数据库域。
表E
importjava.sql.*;
importjava.text.DateFormat;
importjava.util.Date;
publicclassDateExample10{
publicstaticvoidmain(String[]args){
//Getafulldateformatter.
DateFormatdateFormatter=DateFormat.getDateTimeInstance(
DateFormat.FULL,
DateFormat.FULL);
//Getthesystemdateandtime.
java.util.DateutilDate=newDate();
//Convertittojava.sql.Date
java.sql.Datedate=newjava.sql.Date(utilDate.getTime());
//Displaythedatebeforestoring.
System.out.println(dateFormatter.format(date));
//Savethedatetothedatabase.
setLastHit(date);
//Getthedatefromthedatabase.
DatedateFromDB=getLastHit();
//Displaythedatefromthedatabase.
System.out.println(dateFormatter.format(dateFromDB));
}
publicstaticvoidsetLastHit(java.sql.Datedate){
try{
//Loadtheclass.
Class.forName("oracle.jdbc.driver.OracleDriver");
//Getaconnection.
Connectionconnection=DriverManager.getConnection(
//DatabaseURL
"jdbc:oracle:thin:@localhost:1521:buzz2",
"web_site",//Username
"web_site");//Password
try{
/Getapreparedstatementfromtheconnection
//specifyingtheupdateSQL.
PreparedStatementps=connection.prepareStatement(
"updateLAST_ACCESSsetLAST_HIT=");
try{
/setthedatelettingJDBCtotheworkof
//formattingtheSQLappropriately.
ps.setDate(1,date);
//Executetheupdatestatement.
intiRowsUpdated=ps.executeUpdate();
System.out.println("Rowsupdated:"+iRowsUpdated);
}finally{
ps.close();
}
}finally{
connection.close();
}
}catch(Exceptionex){
System.out.println("Error:"+ex.getMessage());
}
}
publicstaticjava.sql.DategetLastHit(){
java.sql.DatereturnDate=null;
try{
//Loadthedriverclass.
Class.forName("oracle.jdbc.driver.OracleDriver");
//Gettheconnection.
Connectionconnection=DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:buzz2",
"web_site","web_site");
try{
/Getthepreparedstatementspecifyingthe
//selectSQL.
PreparedStatementps=connection.prepareStatement(
"selectLAST_HITfromLAST_ACCESS");
try{
//ExecutetheSQLandgettheResultSetobject.
ResultSetrs=ps.executeQuery();
try{
//Retreivetherecord.
if(rs.next()){
//Returnthelasthitdate.
returnDate=rs.getDate("LAST_HIT");
System.out.println(
"Successfullyretrievedlasthit.");
}else{
System.out.println("Didnotgetlasthit.");
}
}
finally{
rs.close();
}
}finally{
ps.close();
}
}finally{
connection.close();
}
}catch(Exceptionex){
System.out.println("Error:"+ex.getMessage());
}
returnreturnDate;
}
}
这个例子的输入以下:
Friday,October5,200110:42:34PMEDT
Rowsupdated:1
Successfullyretrievedlasthit.
Friday,October5,200112:00:00AMEDT
固然这个例子没无为保留和提取日期数据供应功能上优秀的办法,但它的确树模了怎样为一条更新和删除语句将Java日期数据转换成SQL日期数据。从一个java.util.Date对象设置Oracledate数据域的历程是由以下的语句处置的:
ps.setDate(1,date);
它是我们预界说语句接口java.sql.PreparedStatement.setDate的一个办法。
这行代码呈现在我们的setLastHit办法里。它将Java以微秒为单元的长整型日期值转换成ORACLE的SQL日期格局。当我们可以在getLastHit办法里用java.sql.PreparedStatement.getDate从数据库获得日期数据的时分这类转换就可以够完成。
你还应当注重到只要日期被设置了。小时,分钟,秒,和微秒都没有包含在从Java日期数据到SQL日期数据的转换过程当中。
结论
一旦你把握了这些观点,你就应当可以基于体系工夫大概一个输出的工夫创立日期对象了。别的,你还应当可以利用尺度和定制的格局化历程格局化日期数据,将文本的日期数据剖析成日期对象,并以多种言语和多种时区显现一个日期数据。最初,你将可以在一个SQL数据库里保留和提取日期值。
C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译) 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 是一种语言,用以产生「小应用程序(Applet(s)) Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 是一种使用者不需花费很多时间学习的语言 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 是一种使用者不需花费很多时间学习的语言 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
页:
[1]
2