一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

java.sql.date與java.util.date區(qū)別以及數(shù)據(jù)庫中插入帶時分秒的時間

 真愛圖書 2015-05-29

java.sql.Date,java.sql.Time和java.sql.Timestamp三個都是java.util.Date的子類(包裝類)。

java.sql.Date是java.util.Date的子類,是一個包裝了毫秒值的瘦包裝器,允許 JDBC 將毫秒值標(biāo)識為 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以來經(jīng)過的毫秒數(shù)。 為了與 SQL DATE 的定義一致,由 java.sql.Date 實例包裝的毫秒值必須通過將時間、分鐘、秒和毫秒設(shè)置為與該實例相關(guān)的特定時區(qū)中的零來“規(guī)范化”。

說白了,java.sql.Date就是與數(shù)據(jù)庫Date相對應(yīng)的一個類型,而java.util.Date是純java的Date。

從類 java.util.Date 繼承的方法 
after, before, clone, compareTo, equals, getDate, getDay, getMonth, getTime, getTimezoneOffset, getYear, hashCode, parse, setDate, setMonth, setYear, toGMTString, toLocaleString, UTC 

sql.Date也有時間的
如果不想用oracle的to_date函數(shù),可以自己生成sql.Date對象
String s = "2012-06-21 00:10:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date d1 = sdf.parse(s); //先把字符串轉(zhuǎn)為util.Date對象
java.sql.Date d2 = new java.sql.Date(d1.getTime()); //再轉(zhuǎn)換為sql.Date對象

想要將帶時分秒的時間插入到數(shù)據(jù)庫中,除了Oracle數(shù)據(jù)庫的to_date()方法之外。我們可以用 Timestamp類來實現(xiàn)。java.sql.Date是規(guī)范化之后的時間,其時分秒部分被截取掉了。

java.sql.Date是為了配合SQL DATE而設(shè)置的數(shù)據(jù)類型?!耙?guī)范化”的java.sql.Date只包含年月日信息,時分秒毫秒都會清零。格式類似:YYYY-MM-DD。當(dāng)我們調(diào)用ResultSet的getDate()方法來獲得返回值時,java程序會參照"規(guī)范"的java.sql.Date來格式化數(shù)據(jù)庫中的數(shù)值。因此,如果數(shù)據(jù)庫中存在的非規(guī)范化部分的信息將會被劫取。
 在sun提供的ResultSet.java中這樣對getDate進(jìn)行注釋的:
       Retrieves the of the designated column in the current row of this <code>ResultSet</code> object as a “java.sql.Date” object in the Java programming language.


         同理。如果我們把一個java.sql.Date值通過PrepareStatement的setDate方法存入數(shù)據(jù)庫時,java程序會對傳入的java.sql.Date規(guī)范化,非規(guī)范化的部分將會被劫取。然而,我們java.sql.Date一般由java.util.Date轉(zhuǎn)換過來,如:java.sql.Date sqlDate=new java.sql.Date(new java.util.Date().getTime()).
顯然,這樣轉(zhuǎn)換過來的java.sql.Date往往不是一個規(guī)范的java.sql.Date.要保存java.util.Date的精確值,
我們需要利用java.sql.Timestamp.

eg:

 

  1. <SPAN style="FONT-SIZE: 18px">  String s="2012-01-02 03:12:21";  
  2.         SimpleDateFormat sp = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
  3.         java.util.Date du = sp.parse(s);  
  4.             java.sql.Timestamp st = new java.sql.Timestamp(du.getTime());</SPAN>  


把一個日期值寫入數(shù)據(jù)庫中,發(fā)現(xiàn)由java.util.Date轉(zhuǎn)存為java.sql.Date后,只有年月日,沒有了時分秒: 

  1. java.util.Date ud = new java.util.Date();   
  2. java.sql.Date sd = new java.sql.Date(ud.getTime()); 

  這個可是不行的,用戶至少要精確到分。由于java.sql.Date為了能夠遵守sql日期標(biāo)準(zhǔn),把所有時分秒都?xì)w了零。只有用Timestamp來進(jìn)行保存,由于Timestamp是子類,因此寫好的bean里面不需要修改數(shù)據(jù)類型。 

  1. pstmt.setTimestamp(15new java.sql.Timestamp(Calendar.getInstance().getTime().getTime()));  //當(dāng)前時間  
  2. pstmt.setTimestamp(16new java.sql.Timestamp(userFile.getCreateTime().getTime()));  //指定時間   

對于指定時間還可以用Calendar類的setTime()方法來設(shè)置

  1. <SPAN style="FONT-SIZE: 18px">Calendar cal = Calendar.getInstance();  
  2.             System.out.println(cal.getTime().getTime());  
  3.         String string="2012-01-01 01:02:03";  
  4.     SimpleDateFormat sp = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
  5.         java.util.Date da = sp.parse(string);  
  6.         cal.setTime(da);  
  7.             System.out.println(cal.getTime().getTime());</SPAN>  


 在數(shù)據(jù)庫中插入帶時分秒的時間需要用Timestamp。一般做這種操作用框架居多,我就說一下Hibernate吧。在數(shù)據(jù)庫表中字段類型設(shè)置為Date數(shù)據(jù)類型,代碼中映射的字段類型設(shè)置為 Timestamp類型, private Timestamp date;  在映射文件中 <property name="date" type="timestamp" column="sj"/> Type也是時間戳類型的。在賦值取值的時候用前面的操作獲取到需要的時間的時間戳對象直接賦值就行。然后就可以用Hibernate執(zhí)行方法將帶時分秒的時間存入到數(shù)據(jù)庫里了。(不過這一點意義好像不是很大,大多都是直接varchar2存進(jìn)去,取時候再to_date一下或者在代碼里處理)

      還需要說一點的就是

在使用SimpleDateFormat時格式化時間的 yyyy.MM.dd 為年月日而如果希望格式化時間為12小時制的,則使用hh:mm:ss 如果希望格式化時間為24小時制的,則使用HH:mm:ss,上代碼:

  1. SimpleDateFormat ss = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小時制     


 

  1. SimpleDateFormat sdformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小時制  


 

  1. Date d = new Date();  
  2.         SimpleDateFormat ss = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小時制   
  3.         System.out.println(ss.format(d));  
  4.   
  5.         Date date = new Date();  
  6.         SimpleDateFormat sdformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小時制   
  7.         String LgTime = sdformat.format(date);  
  8.         System.out.println(LgTime);  
  9.   
  10.   
  11. 結(jié)果為  
  12. 2008-05-28 01:32:54  
  13. 2008-05-28 13:32:54  


 Date類,已經(jīng)很少用了。更多使用的是Calendar  
  Calendar
    date    =    Calendar.getInstance();   
  date.get(Calendar.HOUR_OF_DAY    );//得到24小時機(jī)制的   
  date.get(Calendar.HOUR);//    得到12小時機(jī)制的   


 

 

 

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    午夜日韩在线观看视频| 午夜精品在线观看视频午夜| 久久夜色精品国产高清不卡 | 亚洲高清中文字幕一区二三区| 在线观看那种视频你懂的| 日韩蜜桃一区二区三区| 国产免费人成视频尤物| 亚洲a码一区二区三区| 欧美黑人精品一区二区在线| 精品国产成人av一区二区三区| 欧美一区二区三区视频区| 夫妻性生活真人动作视频| 性欧美唯美尤物另类视频 | 老司机这里只有精品视频| 欧美日韩国产精品第五页| 国内胖女人做爰视频有没有| 国产老熟女乱子人伦视频| 国产日韩欧美综合视频| 欧美丰满人妻少妇精品| 成人精品一级特黄大片| 亚洲黄色在线观看免费高清| 日本在线不卡高清欧美 | 国产偷拍精品在线视频| 国产肥女老熟女激情视频一区| 国产三级黄片在线免费看| 国产精品香蕉一级免费| 日韩精品综合福利在线观看| av国产熟妇露脸在线观看| 日韩人妻欧美一区二区久久| 亚洲精品成人午夜久久| 国语久精品在视频在线观看| 久草精品视频精品视频精品| 国产熟女一区二区精品视频| 国产又色又粗又黄又爽| 清纯少妇被捅到高潮免费观看| 欧美一区日韩二区亚洲三区| 免费午夜福利不卡片在线 视频| 青青操视频在线观看国产| 99久久人妻中文字幕| 亚洲天堂一区在线播放| 精品国产丝袜一区二区|