隨筆-200  評論-148  文章-15  trackbacks-0

          將Date類型寫入數據庫的兩種方法
          先了解幾個類:
          1、具體類(和抽象類相對)java.util.Date?
          2、抽象類java.text.DateFormat 和它的一個具體子類,java.text.SimpleDateFormat?
          3、抽象類java.util.Calendar 和它的一個具體子類,java.util.GregorianCalendar?
          具體類可以被實例化, 但是抽象類卻不能. 你首先必須實現抽象類的一個具體子類.

          ************************************
          一種將java的日期類型直接轉換為SQL的日期類型的方法,比較簡單但適用性狹窄,
          注意一下例子在jdk下編譯沒有時間,但在jb和Eclipse下就有時間,不知怎么回事

          ——————————————
          public class a {

          public static void main(String[] args) {
          ?
          ? java.util.Date now = new Date();
          ? //PreparedStatement類型的setDate方法只接受sql.date類型,所有必須先轉換
          ? java.sql.Date sqlnow = new java.sql.Date(now.getTime());
          ?? try {
          ??? //froName必須放在try中,否則編譯不通過,可能froName方法拋出編譯時異常了
          ??? //經查閱 public static Class forName(String className) throws???? ClassNotFoundException {...}
          ??? Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
          ??? Connection connection = DriverManager.getConnection("jdbc:microsoft:sqlserver://192.168.0.2:1433;DatabaseName=pubs","sa","");
          ??? PreparedStatement ps=connection.prepareStatement("update test set f1=?");
          ??? ps.setDate(1,sqlnow);
          ??? int i = ps.executeUpdate();
          ?? }
          ??? catch (Exception ex) {}

          ?}
          }
          **********************************************************
          另一種是將java的date類型通過SimpleDateFormat轉換為字符串,再寫到sql語句中
          -----------------------------------------------------------
          import java.sql.*;
          import java.text.SimpleDateFormat;
          import java.util.Date;
          public class a{
          ? public static void main(String[] args) {
          ? //之所以用kk而不用hh是因為kk是24進制的而不雖操作系統設置變動
          ? SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
          ? Date now = new Date();
          ? //format()方法的返回值是String型
          ? System.out.println(sdf.format(date));
          ?}}

          -----------------------------------------------------
          一下是逆操作,將String轉換為Date,parse()方法能拋出ParseException異常,所以你必須使用適當的異常處理技術
          try{
          ??? SimpleDateFormat sbf =new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
          ??? String sdate="2004-05-14 21:29:51";
          ??? Date ddate = sbf.parse(sdate);
          ??? System.out.println(ddate);
          ??? }
          catch (Exception ex) { }
          **************************************************************
          以下是副產品,我們用到的情況比較少
          util.date類型
          ----------------------------------------------
          ?? //1年前日期
          ?? java.util.Date myDate=new java.util.Date();?
          ?? long myTime=(myDate.getTime()/1000)-60*60*24*365;
          ?? myDate.setTime(myTime*1000);
          ?? //明天日期
          ?? myDate=new java.util.Date();
          ?? myTime=(myDate.getTime()/1000)+60*60*24;
          ?? myDate.setTime(myTime*1000);
          ? //兩個時間之間的天數
          ?? SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
          ?? java.util.Date date= myFormatter.parse("2003-05-1");
          ?? java.util.Date mydate= myFormatter.parse("1899-12-30");
          ?? long? day=(date.getTime()-mydate.getTime())/(24*60*60*1000);
          ?? //加半小時
          ?? SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
          ?? java.util.Date date1 = format.parse("2002-02-28 23:16:00");
          ?? long Time=(date1.getTime()/1000)+60*30;
          ?? date1.setTime(Time*1000);
          ?? String mydate1=formatter.format(date1);
          ?? //年月周求日期
          ?? SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");
          ?? java.util.Date date2= formatter2.parse("2003-05 5 星期五");
          ?? SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");
          ?? String mydate2=formatter3.format(date2);
          ?? //求是星期幾
          ?? mydate= myFormatter.parse("2001-1-1");
          ?? SimpleDateFormat formatter4 = new SimpleDateFormat("E");
          ?? String mydate3=formatter4.format(mydate);
          -----------------------------------------------
          ?now.getYear();//實際年份減去1900,如果構造函數為Date(2008,2,25)則不減1900,如果構造函數為Date(17009456745)或者setTime(17009456745)還減1900
          ?now.getMonth();//實際月份減去1,如果構造函數為Date(2008,2,25)則不減1,如果構造函數為Date(17009456745)或者setTime(17009456745)還減1900
          ?now.getDay();//*,原來是取星期,不知sun公司是咋想的,腦袋進水了。
          ?now.getDate();//這才是取1~31之間的日
          ?now.getHours();//24進制的小時
          ?now.getMinutes();//分
          ?now.getSeconds();//秒
          ?now.getTime();//返回1970年1月1日00:00:00起至今的毫秒數
          ?now.setTime(long time);//真實日期為1970年1月1日午夜+time毫秒

          *************************************
          日歷類型的子類GregorianCalendar類型
          構造函數GregorianCalendar(int year, int month, int date) ,無參數為但前時間
          注意月份的表示,一月是0,二月是1,以此類推。因此最好使用單詞而不是使用數字來表示月份。父類Calendar使用常量來表示月份:JANUARY, FEBRUARY...
          所以1903年12月17日可以寫為
          GregorianCalendar aaa = new GregorianCalendar(1903, Calendar.DECEMBER, 17)
          GregorianCalendar aaa = new GregorianCalendar(1903, 11, 17);
          ---------------------------------------
          import java.util.Date;
          import java.text.DateFormat;
          import java.util.GregorianCalendar;
          public class a {
          public static void main(String[] args) {
          ? DateFormat df =? DateFormat.getDateInstance(DateFormat.FULL);
          ? GregorianCalendar gca = new GregorianCalendar();
          ? //getTime()方法是將GregorianCalendar對象轉換為Date對象
          ? gca.setTime(new Date());
          ? System.out.println("系統時間: " +df.format(gca.getTime()));
          ? //set 方法能夠讓我們通過簡單的設置星期中的哪一天這個域來將我們的時間調整為星期五.注意到這里我們使用了常量 DAY_OF_WEEK 和 FRIDAY來增強代碼的可讀性.
          ? //如果當前為星期五時間不變
          ? gca.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);
          ? System.out.println("下一個星期五: " +? df.format(gca.getTime()));
          ? //add 方法讓我們能夠在日期上加上數值.
          ? gca.add(GregorianCalendar.DAY_OF_MONTH, 8);
          ? System.out.println("再加8天: " +? df.format(gca.getTime()));
          ? //get方法取對象中的一部分
          ? int i =? gca.get(GregorianCalendar.DAY_OF_MONTH);
          ? System.out.println(i);
          }}



          ***************************************
          Locale類:(java.util.Locale)
          -----------------------------------
          import java.util.Locale;
          public class a {
          ?public static void main(String[] args) {
          ? Locale localeEN = new Locale("en", "US");
          ? //另一實例化方法=locale.ENGLISH;
          ? System.out.println("Display Name: " +localeEN.getDisplayName());
          ? System.out.println("Country: " + localeEN.getCountry());
          ? System.out.println("Language: " + localeEN.getLanguage());

          ? 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());

          ? // 用三種語言顯示本機語言、英語、法語
          ? System.out.println("用本語顯示DisplayName: "+ localeEN.getDisplayName());
          ? System.out.println("用英語顯示DisplayName:"+?? localeEN.getDisplayName(localeEN ));
          ? System.out.println("用法語顯示DisplayName:"+?? localeEN.getDisplayName(localeFR ));
          ?}
          }
          *****************************************************

          把Date以不同地域的格式顯示:java.text.DateFormat
          getDateTimeInstance()的前兩個參數分別代表日期風格和時間風格,取值為SHORT, MEDIUM, LONG, 和 FULL
          getDateInstance()方法:Java還提供了幾個選擇日期格式,你可以通過使用重載的getDateInstance(int style)獲得。出于方便的原因,DateFormat提供了幾種預置的常量,你可以使用這些常量參數SHORT, MEDIUM, LONG, 和FULL
          -----------------------------------------------
          import java.util.Locale;
          import java.text.DateFormat;
          import java.util.Date;
          public class a {
          ? public static void main(String[] args) {????
          ??? Date now=new Date();
          ??? Locale localeCN=Locale.CHINA;
          ??? DateFormat df=DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL,localeCN);
          ??? System.out.println(df.format(now));
          ?? //結果為2004年5月17日 星期一 下午16時38分32秒 CST?
          }}
          ******************************************************
          時區 java.util.TimeZone
          --------------------------------------------------------
          import java.util.TimeZone;
          public class a {
          ? public static void main(String[] args) {
          ? // 系統時區
          ? TimeZone timeZoneFL = TimeZone.getDefault();
          ? System.out.println("\n" + timeZoneFL.getDisplayName());
          ? System.out.println("與GMT相差的微秒數: " + timeZoneFL.getRawOffset());
          ? System.out.println("Uses daylight saving: " + timeZoneFL.useDaylightTime());
          ? //通過“時區字符串ID”指定時區
          ? TimeZone timeZoneLondon = TimeZone.getTimeZone("Europe/London");
          ? System.out.println("\n" + timeZoneLondon.getDisplayName());
          ? System.out.println("與GMT相差的微秒數: " + timeZoneLondon.getRawOffset());
          ? System.out.println("采用夏令時: " + timeZoneLondon.useDaylightTime());
          ? }}
          -------------------------------------------------------
          顯示結果:
          中國標準時間
          與GMT相差的微秒數:
          Uses daylight saving:false;

          格林威治時間
          與GMT相差的微秒數:
          采用夏令時: true

          ********************************************************
          顯示不同時區的時間? df.setTimeZone(TimeZone kkk)
          ----------------------------------------------------
          public class a {
          ? public static void main(String[] args) {

          ??? Date now=new Date();
          ??? DateFormat df=DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL);
          ??? TimeZone timezoneCH=TimeZone.getTimeZone("China/BeiJing");
          ??? df.setTimeZone(timezoneCH);
          ??? System.out.println("北京時間"+df.format(now));
          ??? TimeZone timezoneFR=TimeZone.getTimeZone("Europe/Paris");
          ??? df.setTimeZone(timezoneFR);
          ??? System.out.println("巴黎時間"+df.format(now));???
          ? }}
          -----------------------------------------------------
          結果如下:
          北京時間2004年5月17日 星期一 上午09時31分34秒 GMT
          巴黎時間2004年5月17日 星期一 上午11時31分34秒 CEST
          *******************************************************

          posted on 2006-07-27 08:29 無聲 閱讀(8169) 評論(0)  編輯  收藏 所屬分類: 職場生活
          主站蜘蛛池模板: 合水县| 钟山县| 安塞县| 大庆市| 闻喜县| 祁东县| 成安县| 庄河市| 凤凰县| 峨边| 循化| 延庆县| 淮南市| 枣阳市| 庆云县| 龙山县| 长沙市| 双峰县| 开江县| 新津县| 梅河口市| 岱山县| 普兰店市| 马公市| 汝南县| 漾濞| 舞钢市| 无锡市| 石棉县| 抚顺市| 遂平县| 沙湾县| 台江县| 娱乐| 将乐县| 东莞市| 天气| 图们市| 越西县| 合江县| 东兰县|