java中的日期類型:java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp區別和總結

     

在web開發中,避免不了對日期的操做,就幾種常見的日期操做作個總結(部分參考網絡,在此表示感謝):html

java.util.Date、Java.util.Calendar、java.sql.Date、java.sql.Time、java.sql.Timestampjava

 

java.lang.Object 
....|__java.util.Date 
..........|__java.sql.Date/java.sql.Timestamp /java.sql.Timemysql

....|__java.security.Timestampweb

 

java.util.Date日期格式爲:年月日時分秒 
java.sql.Date日期格式爲:年月日[只存儲日期數據不存儲時間數據] 
java.sql.Time日期格式爲:時分秒 
java.sql.Timestamp日期格式爲:年月日時分秒納秒(毫微秒)sql

關係:數據庫

    java.util.Date這個類是java.sql.Date,  java.sql.Time,  java.slq.Timestamp這三個類的父類。這三個類對java.util.Date類進行了包裝。api

聯繫:數組

    java.sql.Date類屏蔽了java.util.Date類的時間有關的方法(形如:hh:mm:ss),所以,不能夠經過這個類訪問時間有關的信息,好比,若是你經過sqlDate.getHour()方法去訪問小時信息,此方法會拋出一個IllegalArgumentException異常。這是由於java.sql.Date在繼承java.util.Date類的時候對父類進行了重寫,禁用了時間訪問的方法。之因此這麼處理,是爲了和數據庫的Date數據類型相匹配,數據庫的Date數據類行只是保存日期有關的字段。網絡

    Java.sql.Time類屏蔽了java.util.Date的日期有關的字段(形如:yyyy-MM-dd),所以,不能經過這個類訪問日期有關的信息,好比:若是你經過sqlTime.getYear()方法去獲取年有關的信息,此方法會拋出一個IllegalArgumentException異常。這是由於java.sql.Time在繼承java.util.Date類的時候對父類進行了重寫,禁用了日期訪問的方法。之因此這麼處理,是爲了和數據庫的Time數據類型相匹配,數據庫的Time數據類行只是保存時間有關的字段。spa

  Java.sql.Timestamp字段則對java.util.Date這個類進行了擴充,它在java.util.Date類的基礎上增長了毫秒的時間訪問控制,所以,你能夠經過getNanos()方法去獲取時間的毫微秒數(注意此處獲取的時間是以毫微秒爲單位的,1秒等於十億毫微秒),一樣的,這也是爲了和數據庫中的Timestamp數據類型進行匹配。

理清了上述四個類的關係,那麼java.util.Date和java.util.Calendar類有什麼關係呢?

   Java.util.Calendar類是java.util.Date類的一個更加深刻,更加全面的替代。Java.util.Calendar類支持java.util.Date的全部功能,此外,Calendar還引入了多語言,多區域的特性,能夠根據須要獲取不一樣區域,不一樣時區的時間,Calendar還增長了比Date更加方便和快捷的許多操做,如獲取一年當中的第幾個星期,各個月的天數等便捷的方法。

 

注意:

Java.util.Calendar區別與java.util.Date的幾個地方也須要注意一下:首先,Calendar增長了毫秒的時間段,經過它能夠獲取時間點的毫秒值,而java.util.Date只是精確到秒。其次,Calendar過去年的時候是當前年份好比:2010,而Date獲取年份的時獲取到的是當前年份-1900的一個值(2010-1900=110,所以,你調用getYear後過去的值就是110)。最後Calendar是一個抽象類,之因此可以實例化,是由於此處的Calendar充當了一個相似於工廠的做用,在getInstance方法中實例化了Calendar子類GregorianCalendar,並把它返回給用戶使用。

 

針對不一樣的數據庫選用不一樣的日期類型 
·Oracle的Date類型,只須要年月日,選擇使用java.sql.Date類型 
·MS Sqlserver數據庫的DateTime類型,須要年月日時分秒,選擇java.sql.Timestamp類型

 

String日期格式轉換成Date日期格式

//java.util.Date時間格式的轉換
    SimpleDateFormat f_utilDate=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  String str="2011-5-31 14:40:50";
  try {
   java.util.Date utilDate=f_utilDate.parse(str);
   System.out.println(f_utilDate.format(utilDate));
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

    //java.sql.Date時間格式的轉換
    SimpleDateFormat f_sqlDate=new SimpleDateFormat("yyyy-MM-dd");
    java.sql.Date sqlDate = java.sql.Date.valueOf("2010-08-20");
    System.out.println(f_sqlDate.format(sqlDate));
    
    //java.sql.Time sqltime時間格式的轉換
    SimpleDateFormat f_sqlTime=new SimpleDateFormat("hh:mm:ss");
    java.sql.Time sqltime = java.sql.Time.valueOf("13:44:53"); 
    System.out.println(f_sqlTime.format(sqltime));
    
    //java.sql.Timestamp時間格式的轉換
    SimpleDateFormat f_timestamp=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
    java.sql.Timestamp timestamp = java.sql.Timestamp.valueOf("2010-08-20 14:06:27.186"); 
    System.out.println(f_timestamp.format(timestamp));

 

 //java.util.Date 轉換成 java.sql.Date 格式
       try{
        SimpleDateFormat DateFormate =   new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
               java.util.Date date1 = DateFormate.parse("2011-5-31 14:40:50");
               java.sql.Date sqlDate = new java.sql.Date(date1.getTime());
               System.out.println(DateFormate.format(sqlDate));
       }catch (Exception ex) {
            System.out.println(ex.getMessage());
       }

       //java.sql.Date 轉換成 java.util.Date 格式
       java.sql.Date sqlDate1=java.sql.Date.valueOf("2005-12-12");
       java.util.Date utilDate1=new java.util.Date(sqlDate1.getTime());
       System.out.println("java.sql.Date 轉換成 java.util.Date 格式:"+f.format(utilDate1));

    //java.util.Date轉換java.sql.Timestamp 
    new java.sql.Timestamp(new java.util.Date().getTime());//此處IDE報錯

    //java.util.Date轉換java.sql.Time 
    new java.sql.Time(new java.util.Date().getTime());

    

    Timestamp timestamp  = new Timestamp(System.currentTimeMillis());

   咱們可使用DateFormat處理字符串來定義時間日期的格式 
   注:String都是先轉換爲java.util.Date,而後再轉換成所需的格式

try{   
             String dateString = "2010-08-20 12:00:00.125";    
              DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS",Locale.ENGLISH);//設定格式   
             dateFormat.setLenient(false);   
             java.util.Date utilDate = dateFormat.parse(dateString);//util類型   
             java.sql.Timestamp dateTime = new java.sql.Timestamp(utilDate.getTime());//Timestamp類型,timeDate.getTime()返回一個long型   
             System.out.println(dateTime);   
        }catch(Exception ex){   
            ex.printStackTrace();   
        }        

 

Java MySQL數據類型對照

類型名稱 顯示長度 數據庫類型 JAVA類型 JDBC類型索引(int) 描述
           
VARCHAR L+N VARCHAR java.lang.String 12  
CHAR N CHAR java.lang.String 1  
BLOB L+N BLOB java.lang.byte[] -4  
TEXT 65535 VARCHAR java.lang.String -1  
           
INTEGER 4 INTEGER UNSIGNED java.lang.Long 4  
TINYINT 3 TINYINT UNSIGNED java.lang.Integer -6  
SMALLINT 5 SMALLINT UNSIGNED java.lang.Integer 5  
MEDIUMINT 8 MEDIUMINT UNSIGNED java.lang.Integer 4  
BIT 1 BIT java.lang.Boolean -7  
BIGINT 20 BIGINT UNSIGNED java.math.BigInteger -5  
FLOAT 4+8 FLOAT java.lang.Float 7  
DOUBLE 22 DOUBLE java.lang.Double 8  
DECIMAL 11 DECIMAL java.math.BigDecimal 3  
BOOLEAN 1 同TINYINT      
           
ID 11 PK (INTEGER UNSIGNED) java.lang.Long 4  
           
DATE 10 DATE java.sql.Date 91  
TIME 8 TIME java.sql.Time 92  
DATETIME 19 DATETIME java.sql.Timestamp 93  
TIMESTAMP 19 TIMESTAMP java.sql.Timestamp 93  
YEAR 4 YEAR java.sql.Date 91





 

 

對於bolb,通常用於對圖片的數據庫存儲,原理是把圖片打成二進制,而後進行的一種存儲方式,在java中對應byte[]數組。

 

對Boolean類型的解釋

mysql不支持bool類型。

1

2

3

4

5

create table xs

(

id int primary key,

bl boolean

)

這樣能夠建立成功,但檢查表結構會發現mysql把它替換成tinyint(1)。

即當把一個數據設置成bool類型的時候,數據庫會自動轉換成tinyint(1)的數據類型,其實這個就是變相的bool。 默認值也就是1,0兩種,分別對應了bool的true和false

在Java對應的POJO類中,能夠根據實際狀況使用java.lang.Boolean或者java.lang.Integer。

轉自:

http://langgufu.iteye.com/blog/2202744

https://yq.aliyun.com/articles/38115

相關文章
相關標籤/搜索