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

相关文章
相关标签/搜索