文章詳情頁
Java高級日期概念二
瀏覽:4日期:2024-06-21 17:12:55
內容: 出自:zdnet 時區TimeZone類,即java.util.TimeZone類的實例包含了一個與格林威治標準時間(GMT)相比較得出的以微秒為單位的時區偏移量,而且它還處理夏令時。要獲得一個所有支持的進區的列表,你可以使用方法TimeZone.getAvailableIDs,它將返回一個包含了所有進區ID的字符串數組。要知道關于TimeZone類的更多細節,可以參看Sun公司的Web站點。為了演示這個概念,我們將創建三個時區對象。第一個對象將使用getDefault從系統時鐘返回時區數據;第二個和第三個對象將傳入一個時區字符串ID。見表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正如你所看見的,TimeZone對象給我們的是原始的偏移量,也就是與GMT相差的微秒數,而且還會告訴我們這個時區是否使用夏令時。有個這個信息,我們就能夠繼續將時區對象和日期格式化器結合在一起在其它的時區和其它的語言顯示時間了。國際化的時期顯示了時區轉換讓我們來看一個結合了國際化顯示,時區和日期格式化的例子。表D為一個在邁阿密和巴黎擁有辦公室的公司顯示了當前的完整日期和時間。對于邁阿密的辦公室,我們將在每個辦公室里用英語顯示完整的日期和時間。對于巴黎的辦公室,我們將用法語顯示完整的當前日期和時間。表 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));}}這個例子的輸出是: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 在一個SQL數據庫中保存和提取日期數據我們將要使用的下一個類是java.sql.Date,它是java.util.Date的子類但它使用了Java數據庫連接(JDBC)方法 。讓我們來看一個簡單的只有一個表單--LAST_ACCESS的ORACLE數據庫,它是用下面的SQL創建的:create table LAST_ACCESS (LAST_HIT date);這個表單只有一個記錄,用下面的插入語句創建:insert into LAST_ACCESS values (Sysdate);表E演示了如何修改和提取LAST_HIT數據庫域。表 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;}}這個例子的輸出如下:Friday, October 5, 2001 10:42:34 PM EDTRows updated: 1Successfully retrieved last hit.Friday, October 5, 2001 12:00:00 AM EDT雖然這個例子沒有為保存和提取日期數據提供性能上優良的方法,但它確實示范了如何為一條更新和刪除語句將Java日期數據轉換成SQL日期數據。從一個java.util.Date對象設置Oracle date數據域的過程是由以下的語句處理的:ps.setDate(1, date);它是我們預定義語句接口java.sql.PreparedStatement.setDate 的一個方法。這行代碼出現在我們的setLastHit方法里。它將Java以微秒為單位的長整型日期值轉換成ORACLE的SQL日期格式。當我們能夠在getLastHit方法里用java.sql.PreparedStatement.getDate從數據庫取得日期數據的時候這種轉換就能夠完成。你還應該注意到只有日期被設置了。小時,分鐘,秒,和微秒都沒有包括在從Java日期數據到SQL日期數據的轉換過程中。結論一旦你掌握了這些概念,你就應該能夠基于系統時間或者一個輸入的時間創建日期對象了。另外,你還應該能夠使用標準和定制的格式化過程格式化日期數據,將文本的日期數據解析成日期對象,并以多種語言和多種時區顯示一個日期數據。最后,你將能夠在一個SQL數據庫里保存和提取日期值 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
標簽:
Java
上一條:漢字問題深入談-- 關于JAVA的中文問題下一條:Java高級日期概念一
相關文章:
排行榜
