隨筆-200  評(píng)論-148  文章-15  trackbacks-0

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

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

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

          public static void main(String[] args) {
          ?
          ? java.util.Date now = new Date();
          ? //PreparedStatement類(lèi)型的setDate方法只接受sql.date類(lèi)型,所有必須先轉(zhuǎn)換
          ? java.sql.Date sqlnow = new java.sql.Date(now.getTime());
          ?? try {
          ??? //froName必須放在try中,否則編譯不通過(guò),可能froName方法拋出編譯時(shí)異常了
          ??? //經(jīng)查閱 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類(lèi)型通過(guò)SimpleDateFormat轉(zhuǎn)換為字符串,再寫(xiě)到sql語(yǔ)句中
          -----------------------------------------------------------
          import java.sql.*;
          import java.text.SimpleDateFormat;
          import java.util.Date;
          public class a{
          ? public static void main(String[] args) {
          ? //之所以用kk而不用hh是因?yàn)閗k是24進(jìn)制的而不雖操作系統(tǒng)設(shè)置變動(dòng)
          ? SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
          ? Date now = new Date();
          ? //format()方法的返回值是String型
          ? System.out.println(sdf.format(date));
          ?}}

          -----------------------------------------------------
          一下是逆操作,將String轉(zhuǎn)換為Date,parse()方法能拋出ParseException異常,所以你必須使用適當(dāng)?shù)漠惓L幚砑夹g(shù)
          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) { }
          **************************************************************
          以下是副產(chǎn)品,我們用到的情況比較少
          util.date類(lèi)型
          ----------------------------------------------
          ?? //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);
          ? //兩個(gè)時(shí)間之間的天數(shù)
          ?? 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);
          ?? //加半小時(shí)
          ?? 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();//實(shí)際年份減去1900,如果構(gòu)造函數(shù)為Date(2008,2,25)則不減1900,如果構(gòu)造函數(shù)為Date(17009456745)或者setTime(17009456745)還減1900
          ?now.getMonth();//實(shí)際月份減去1,如果構(gòu)造函數(shù)為Date(2008,2,25)則不減1,如果構(gòu)造函數(shù)為Date(17009456745)或者setTime(17009456745)還減1900
          ?now.getDay();//*,原來(lái)是取星期,不知sun公司是咋想的,腦袋進(jìn)水了。
          ?now.getDate();//這才是取1~31之間的日
          ?now.getHours();//24進(jìn)制的小時(shí)
          ?now.getMinutes();//分
          ?now.getSeconds();//秒
          ?now.getTime();//返回1970年1月1日00:00:00起至今的毫秒數(shù)
          ?now.setTime(long time);//真實(shí)日期為1970年1月1日午夜+time毫秒

          *************************************
          日歷類(lèi)型的子類(lèi)GregorianCalendar類(lèi)型
          構(gòu)造函數(shù)GregorianCalendar(int year, int month, int date) ,無(wú)參數(shù)為但前時(shí)間
          注意月份的表示,一月是0,二月是1,以此類(lèi)推。因此最好使用單詞而不是使用數(shù)字來(lái)表示月份。父類(lèi)Calendar使用常量來(lái)表示月份:JANUARY, FEBRUARY...
          所以1903年12月17日可以寫(xiě)為
          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對(duì)象轉(zhuǎn)換為Date對(duì)象
          ? gca.setTime(new Date());
          ? System.out.println("系統(tǒng)時(shí)間: " +df.format(gca.getTime()));
          ? //set 方法能夠讓我們通過(guò)簡(jiǎn)單的設(shè)置星期中的哪一天這個(gè)域來(lái)將我們的時(shí)間調(diào)整為星期五.注意到這里我們使用了常量 DAY_OF_WEEK 和 FRIDAY來(lái)增強(qiáng)代碼的可讀性.
          ? //如果當(dāng)前為星期五時(shí)間不變
          ? gca.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);
          ? System.out.println("下一個(gè)星期五: " +? df.format(gca.getTime()));
          ? //add 方法讓我們能夠在日期上加上數(shù)值.
          ? gca.add(GregorianCalendar.DAY_OF_MONTH, 8);
          ? System.out.println("再加8天: " +? df.format(gca.getTime()));
          ? //get方法取對(duì)象中的一部分
          ? int i =? gca.get(GregorianCalendar.DAY_OF_MONTH);
          ? System.out.println(i);
          }}



          ***************************************
          Locale類(lèi):(java.util.Locale)
          -----------------------------------
          import java.util.Locale;
          public class a {
          ?public static void main(String[] args) {
          ? Locale localeEN = new Locale("en", "US");
          ? //另一實(shí)例化方法=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());

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

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

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

          ********************************************************
          顯示不同時(shí)區(qū)的時(shí)間? 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("北京時(shí)間"+df.format(now));
          ??? TimeZone timezoneFR=TimeZone.getTimeZone("Europe/Paris");
          ??? df.setTimeZone(timezoneFR);
          ??? System.out.println("巴黎時(shí)間"+df.format(now));???
          ? }}
          -----------------------------------------------------
          結(jié)果如下:
          北京時(shí)間2004年5月17日 星期一 上午09時(shí)31分34秒 GMT
          巴黎時(shí)間2004年5月17日 星期一 上午11時(shí)31分34秒 CEST
          *******************************************************

          posted on 2006-07-27 08:29 無(wú)聲 閱讀(8169) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 職場(chǎng)生活
          主站蜘蛛池模板: 崇义县| 特克斯县| 乌鲁木齐县| 舞钢市| 桐柏县| 新乐市| 乡城县| 禄劝| 通辽市| 襄汾县| 德清县| 定陶县| 视频| 清水县| 嘉义县| 渭南市| 桃江县| 洪江市| 金华市| 滨海县| 河北区| 贡嘎县| 全州县| 启东市| 安平县| 汉沽区| 蒲城县| 砀山县| 易门县| 龙江县| 苍溪县| 三河市| 泰宁县| 万山特区| 虞城县| 吴旗县| 正宁县| 富蕴县| 樟树市| 淮阳县| 井冈山市|