文章詳情頁(yè)
Java高級(jí)日期概念二
瀏覽:4日期:2024-06-21 17:12:55
內(nèi)容: 出自:zdnet 時(shí)區(qū)TimeZone類(lèi),即java.util.TimeZone類(lèi)的實(shí)例包含了一個(gè)與格林威治標(biāo)準(zhǔn)時(shí)間(GMT)相比較得出的以微秒為單位的時(shí)區(qū)偏移量,而且它還處理夏令時(shí)。要獲得一個(gè)所有支持的進(jìn)區(qū)的列表,你可以使用方法TimeZone.getAvailableIDs,它將返回一個(gè)包含了所有進(jìn)區(qū)ID的字符串?dāng)?shù)組。要知道關(guān)于TimeZone類(lèi)的更多細(xì)節(jié),可以參看Sun公司的Web站點(diǎn)。為了演示這個(gè)概念,我們將創(chuàng)建三個(gè)時(shí)區(qū)對(duì)象。第一個(gè)對(duì)象將使用getDefault從系統(tǒng)時(shí)鐘返回時(shí)區(qū)數(shù)據(jù);第二個(gè)和第三個(gè)對(duì)象將傳入一個(gè)時(shí)區(qū)字符串ID。見(jiàn)表C中的代碼。表 C import java.util.TimeZone;import java.util.Date;import java.text.DateFormat;import java.util.Locale;public class DateExample8 {public static void main(String[] args) {// Get the system time zone.TimeZone timeZoneFL = TimeZone.getDefault();System.out.println('n' + timeZoneFL.getDisplayName());System.out.println('RawOffset: ' + timeZoneFL.getRawOffset());System.out.println('Uses daylight saving: ' + timeZoneFL.useDaylightTime());TimeZone timeZoneLondon = TimeZone.getTimeZone('Europe/London');System.out.println('n' + timeZoneLondon.getDisplayName());System.out.println('RawOffset: ' + timeZoneLondon.getRawOffset());System.out.println('Uses daylight saving: ' + timeZoneLondon.useDaylightTime());燭imeZone timeZoneParis = TimeZone.getTimeZone('Europe/Paris');System.out.println('n' + timeZoneParis.getDisplayName());System.out.println('RawOffset: ' + timeZoneParis.getRawOffset());System.out.println('Uses daylight saving: ' + timeZoneParis.useDaylightTime());}}其輸出如下:Eastern Standard TimeRawOffset: -18000000Uses daylight saving: trueGMT+00:00RawOffset: 0Uses daylight saving: trueCentral European Standard TimeRawOffset: 3600000Uses daylight saving: true正如你所看見(jiàn)的,TimeZone對(duì)象給我們的是原始的偏移量,也就是與GMT相差的微秒數(shù),而且還會(huì)告訴我們這個(gè)時(shí)區(qū)是否使用夏令時(shí)。有個(gè)這個(gè)信息,我們就能夠繼續(xù)將時(shí)區(qū)對(duì)象和日期格式化器結(jié)合在一起在其它的時(shí)區(qū)和其它的語(yǔ)言顯示時(shí)間了。國(guó)際化的時(shí)期顯示了時(shí)區(qū)轉(zhuǎn)換讓我們來(lái)看一個(gè)結(jié)合了國(guó)際化顯示,時(shí)區(qū)和日期格式化的例子。表D為一個(gè)在邁阿密和巴黎擁有辦公室的公司顯示了當(dāng)前的完整日期和時(shí)間。對(duì)于邁阿密的辦公室,我們將在每個(gè)辦公室里用英語(yǔ)顯示完整的日期和時(shí)間。對(duì)于巴黎的辦公室,我們將用法語(yǔ)顯示完整的當(dāng)前日期和時(shí)間。表 D import java.util.TimeZone;import java.util.Date;import java.util.Locale;import java.text.DateFormat;public class DateExample9 {public static void main(String[] args) {Locale localeEN = Locale.US;Locale localeFrance = Locale.FRANCE;TimeZone timeZoneMiami = TimeZone.getDefault();TimeZone timeZoneParis = TimeZone.getTimeZone('Europe/Paris');DateFormat dateFormatter = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,localeEN);DateFormat dateFormatterParis = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,localeFrance);Date curDate = new Date();System.out.println('Display for Miami office.');// Print the Miami time zone display name in EnglishSystem.out.println(timeZoneMiami.getDisplayName(localeEN));// Set the time zone of the dateFormatter to Miami time zone.dateFormatter.setTimeZone(timeZoneMiami);// Print the formatted date.System.out.println(dateFormatter.format(curDate));// Set the time zone of the date formatter to Paris time zone.dateFormatter.setTimeZone(timeZoneParis);// Print the Paris time zone display name in English.System.out.println(timeZoneParis.getDisplayName(localeEN));// Print the Paris time in english.System.out.println(dateFormatter.format(curDate));System.out.println('nDisplay for Paris office.');// Print the Miami time zone display name in FrenchSystem.out.println(timeZoneMiami.getDisplayName(localeFrance));// Set the timezone of the// dateFormatterParis to Miami time zone.dateFormatterParis.setTimeZone(timeZoneMiami);// Print the formatted date in French.燬ystem.out.println(dateFormatterParis.format(curDate));// Set the timezone of the date formatter to Paris time zone.dateFormatterParis.setTimeZone(timeZoneParis);// Print the Paris time zone display name in French.System.out.println(timeZoneParis.getDisplayName(localeFrance));// Print the Paris time in French.System.out.println(dateFormatterParis.format(curDate));}}這個(gè)例子的輸出是:Display for Miami office. Eastern Standard TimeFriday, October 5, 2001 10:28:02 PM EDTCentral European Standard TimeSaturday, October 6, 2001 4:28:02 AM CESTDisplay for Paris office. GMT-05:00vendredi 5 octobre 2001 22 h 28 GMT-04:00GMT+01:00samedi 6 octobre 2001 04 h 28 GMT+02:00 在一個(gè)SQL數(shù)據(jù)庫(kù)中保存和提取日期數(shù)據(jù)我們將要使用的下一個(gè)類(lèi)是java.sql.Date,它是java.util.Date的子類(lèi)但它使用了Java數(shù)據(jù)庫(kù)連接(JDBC)方法 。讓我們來(lái)看一個(gè)簡(jiǎn)單的只有一個(gè)表單--LAST_ACCESS的ORACLE數(shù)據(jù)庫(kù),它是用下面的SQL創(chuàng)建的:create table LAST_ACCESS (LAST_HIT date);這個(gè)表單只有一個(gè)記錄,用下面的插入語(yǔ)句創(chuàng)建:insert into LAST_ACCESS values (Sysdate);表E演示了如何修改和提取LAST_HIT數(shù)據(jù)庫(kù)域。表 E import java.sql.*;import java.text.DateFormat;import java.util.Date;public class DateExample10 {public static void main(String[] args) {// Get a full date formatter.DateFormat dateFormatter = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL);// Get the system date and time.java.util.Date utilDate = new Date();// Convert it to java.sql.Datejava.sql.Date date = new java.sql.Date(utilDate.getTime());// Display the date before storing.System.out.println(dateFormatter.format(date));// Save the date to the database.setLastHit(date);// Get the date from the database.Date dateFromDB = getLastHit();// Display the date from the database.System.out.println(dateFormatter.format(dateFromDB));}public static void setLastHit(java.sql.Date date) {try {// Load the class.Class.forName('oracle.jdbc.driver.OracleDriver');// Get a connection.燙onnection connection = DriverManager.getConnection(// Database URL'jdbc:oracle:thin:@localhost:1521:buzz2','web_site', // Username'web_site'); // Passwordtry {/ Get a prepared statement fromthe connection// specifying the update SQL.PreparedStatement ps = connection.prepareStatement('update LAST_ACCESS set LAST_HIT=');try {/ set the date letting JDBC to the work of// formatting the SQL appropriately.ps.setDate(1, date);// Execute the update statement.int iRowsUpdated = ps.executeUpdate();System.out.println('Rows updated: ' + iRowsUpdated);} finally {ps.close();}} finally {connection.close();}} catch (Exception ex) {System.out.println('Error: ' + ex.getMessage());}}public static java.sql.Date getLastHit() {java.sql.Date returnDate = null;try {// Load the driver class.Class.forName('oracle.jdbc.driver.OracleDriver');// Get the connection.Connection connection = DriverManager.getConnection('jdbc:oracle:thin:@localhost:1521:buzz2','web_site', 'web_site');try {/ Get the prepared statement specifying the// select SQL.PreparedStatement ps = connection.prepareStatement('select LAST_HIT from LAST_ACCESS');try {// Execute the SQL and get the ResultSet object.ResultSet rs = ps.executeQuery();try {// Retreive the record.if (rs else {燬ystem.out.println('Did not get last hit.');}}finally {rs.close();}} finally {ps.close();爙} finally {connection.close();}} catch (Exception ex) {System.out.println('Error: ' + ex.getMessage());}return returnDate;}}這個(gè)例子的輸出如下:Friday, October 5, 2001 10:42:34 PM EDTRows updated: 1Successfully retrieved last hit.Friday, October 5, 2001 12:00:00 AM EDT雖然這個(gè)例子沒(méi)有為保存和提取日期數(shù)據(jù)提供性能上優(yōu)良的方法,但它確實(shí)示范了如何為一條更新和刪除語(yǔ)句將Java日期數(shù)據(jù)轉(zhuǎn)換成SQL日期數(shù)據(jù)。從一個(gè)java.util.Date對(duì)象設(shè)置Oracle date數(shù)據(jù)域的過(guò)程是由以下的語(yǔ)句處理的:ps.setDate(1, date);它是我們預(yù)定義語(yǔ)句接口java.sql.PreparedStatement.setDate 的一個(gè)方法。這行代碼出現(xiàn)在我們的setLastHit方法里。它將Java以微秒為單位的長(zhǎng)整型日期值轉(zhuǎn)換成ORACLE的SQL日期格式。當(dāng)我們能夠在getLastHit方法里用java.sql.PreparedStatement.getDate從數(shù)據(jù)庫(kù)取得日期數(shù)據(jù)的時(shí)候這種轉(zhuǎn)換就能夠完成。你還應(yīng)該注意到只有日期被設(shè)置了。小時(shí),分鐘,秒,和微秒都沒(méi)有包括在從Java日期數(shù)據(jù)到SQL日期數(shù)據(jù)的轉(zhuǎn)換過(guò)程中。結(jié)論一旦你掌握了這些概念,你就應(yīng)該能夠基于系統(tǒng)時(shí)間或者一個(gè)輸入的時(shí)間創(chuàng)建日期對(duì)象了。另外,你還應(yīng)該能夠使用標(biāo)準(zhǔn)和定制的格式化過(guò)程格式化日期數(shù)據(jù),將文本的日期數(shù)據(jù)解析成日期對(duì)象,并以多種語(yǔ)言和多種時(shí)區(qū)顯示一個(gè)日期數(shù)據(jù)。最后,你將能夠在一個(gè)SQL數(shù)據(jù)庫(kù)里保存和提取日期值 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標(biāo)簽:
Java
相關(guān)文章:
1. HTML 絕對(duì)路徑與相對(duì)路徑概念詳細(xì)2. 原生Ajax之全面了解xhr的概念與使用3. Java中堆和棧的概念和區(qū)別4. JXTA概念介紹-Matrix翻譯5. Python協(xié)程asyncio模塊的演變及高級(jí)用法6. JS數(shù)組的高級(jí)使用方法示例小結(jié)7. Java高級(jí)編程:打印--學(xué)習(xí)如何使用打印服務(wù)API8. JavaScript事件概念詳解(區(qū)分靜態(tài)注冊(cè)和動(dòng)態(tài)注冊(cè))9. 解析python高級(jí)異常和運(yùn)算符重載10. python imutils包基本概念及使用
排行榜
