Date對象存入mysql數據庫

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

java.sql.Date是java.util.Date的子類,是一個包裝了毫秒值的瘦包裝器,容許 JDBC 將毫秒值標識爲 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以來通過的毫秒數。 爲了與 SQL DATE 的定義一致,由 java.sql.Date 實例包裝的毫秒值必須經過將時間、分鐘、秒和毫秒設置爲與該實例相關的特定時區中的零來「規範化」。 sql

說白了,java.sql.Date就是與數據庫Date相對應的一個類型,而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 
oracle

sql.Date也有時間的
若是不想用oracle的to_date函數,能夠本身生成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); //先把字符串轉爲util.Date對象
java.sql.Date d2 = new java.sql.Date(d1.getTime()); //再轉換爲sql.Date對象

想要將帶時分秒的時間插入到數據庫中,除了Oracle數據庫的to_date()方法以外。咱們能夠用 Timestamp類來實現。java.sql.Date是規範化以後的時間,其時分秒部分被截取掉了。 app

java.sql.Date是爲了配合SQL DATE而設置的數據類型。「規範化」的java.sql.Date只包含年月日信息,時分秒毫秒都會清零。格式相似:YYYY-MM-DD。當咱們調用ResultSet的getDate()方法來得到返回值時,java程序會參照"規範"的java.sql.Date來格式化數據庫中的數值。所以,若是數據庫中存在的非規範化部分的信息將會被劫取。
 在sun提供的ResultSet.java中這樣對getDate進行註釋的:
       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方法存入數據庫時,java程序會對傳入的java.sql.Date規範化,非規範化的部分將會被劫取。然而,咱們java.sql.Date通常由java.util.Date轉換過來,如:java.sql.Date sqlDate=new java.sql.Date(new java.util.Date().getTime()).
顯然,這樣轉換過來的java.sql.Date每每不是一個規範的java.sql.Date.要保存java.util.Date的精確值,
咱們須要利用java.sql.Timestamp.

eg: 函數

 

[java]   view plain copy
  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>  


把一個日期值寫入數據庫中,發現由java.util.Date轉存爲java.sql.Date後,只有年月日,沒有了時分秒:  this

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

  這個但是不行的,用戶至少要精確到分。因爲java.sql.Date爲了可以遵照sql日期標準,把全部時分秒都歸了零。只有用Timestamp來進行保存,因爲Timestamp是子類,所以寫好的bean裏面不須要修改數據類型。  spa

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

對於指定時間還能夠用Calendar類的setTime()方法來設置 .net

[java]   view plain copy
  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>  


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

      還須要說一點的就是

在使用SimpleDateFormat時格式化時間的 yyyy.MM.dd 爲年月日而若是但願格式化時間爲12小時制的,則使用hh:mm:ss 若是但願格式化時間爲24小時制的,則使用HH:mm:ss,上代碼:

[java]   view plain copy
  1. SimpleDateFormat ss = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小時制     


 

[java]   view plain copy
  1. SimpleDateFormat sdformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小時制  


 

[java]   view plain copy
  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. 結果爲  
  12. 2008-05-28 01:32:54  
  13. 2008-05-28 13:32:54  


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

相關文章
相關標籤/搜索