`
langgufu
  • 浏览: 2306971 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结(转载)

阅读更多

在web开发中,避免不了对日期的操作,就几种常见的日期操作做个总结(部分参考网络,在此表示感谢):

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

 

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

....|__java.security.Timestamp

 

java.util.Date日期格式为:年月日时分秒 
java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据] 
java.sql.Time日期格式为:时分秒 
java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒)

关系:

    java.util.Date这个类是java.sql.Date,  java.sql.Time,  java.slq.Timestamp这三个类的父类。这三个类对java.util.Date类进行了包装。

联系:

    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数据类行只是保存时间有关的字段。

  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.util.Date与java.sql.Date互转及字符串转换为日期时间格式.docx

    java.util.Date utilDate = new java.util.Date(sqlDate.getTime()); ``` #### 三、字符串转换为日期时间格式 将字符串转换为日期时间格式通常需要用到`SimpleDateFormat`类。下面分别介绍两种常见的字符串到日期...

    java.util.Date与java.sql.Date互转及字符串转换为日期时间格式[文].pdf

    java.sql.Date、java.sql.Time和java.sql.Timestamp都是java.util.Date的子类(包装类)。但是,java.sql.Date类型的值插入到数据库中Date字段中会发生数据截取。这是因为java.sql.Date只包含年月日信息,时分秒毫秒...

    java.sql.date与java.util.date.pdf

    `java.sql.Time` 类仅包含小时、分钟和秒,而 `java.sql.Timestamp` 包含了完整的日期和时间,精度到纳秒,相当于 `java.util.Date` 的扩展。 对于字符串与 `java.sql.Date` 之间的转换,可以使用 `...

    java.sql.与java.util

    `java.sql.Time`仅包含时间信息(小时、分钟和秒),而`Timestamp`则包含日期和时间,精度到纳秒,可以视为`java.util.Date`的增强版,适用于需要高精度的场景。 在数据库操作中,有时需要将字符串转换为`java.sql....

    Java.util.date与java.sql.date区别和转换

    类型转换 ( Java.util.date与java.sql.date区别和转换

    Android的SQLite中DateTime类型数据的存取问题

    首先,使用 SimpleDateFormat 需要将字符串类型的日期数据解析成 java.util.Date 类型,然后使用 java.sql.Timestamp 将其转换成 Timestamp 对象。最后,可以直接将 Timestamp 对象插入到 SQLite 数据库中。 取出 ...

    java四种时间的区别和联系

    本文将深入探讨`java.util.Date`、`java.util.Calendar`、`java.sql.Date`、`java.sql.Time`和`java.sql.Timestamp`这五种日期时间类之间的区别和联系。 #### 1. `java.util.Date` `java.util.Date`类是Java中表示...

    Javautildate与javasqldate区别和转换[文].pdf

    此外,`java.sql`包中还有`java.sql.Time`和`java.sql.Timestamp`类,分别用于表示时间(不包含日期)和日期时间的精确值,它们同样可以从`java.util.Date`通过`getTime()`方法转换得到。 总之,`java.util.Date`...

    有关java中的Date,String,Timestamp之间的转化问题

    Java 中的 `java.util.Date` 类和 `java.sql.Date` 类都是用于表示日期和时间的,但是它们有所不同。`java.util.Date` 类有无参的构造函数,而 `java.sql.Date` 类没有无参的构造函数。 可以使用以下方式将 `String...

    mysql时间类型对应的java类型1

    - `java.util.Date`(Java的日期时间类)可以转换为`java.sql.Date`、`java.sql.Time`或`java.sql.Timestamp`,通过`SimpleDateFormat`进行格式化。 - `java.time.*`(Java 8引入的新日期时间API)的类如`...

    浅谈java中六大时间类的使用和区别

    Java提供了多种时间类来满足不同的需求,包括`java.util.Date`, `java.sql.Date`, `java.sql.Time`, `java.sql.Timestamp`, `java.text.SimpleDateFormat`, 和 `java.util.Calendar`。下面我们将深入探讨这些类的...

    项目源码-java图书馆管理系统

    import java.sql.Date; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import ...

    xfire测试项目(包括复杂数据类型)

    public java.sql.Timestamp getTimestamp(java.sql.Timestamp a); public java.sql.Date getSDate(java.sql.Date a); public java.sql.Time getTime(java.sql.Time a); /*自定义类型*/ public UserBean getUser...

    PreparedStatement 向数据库插入时间方法

    关键在于正确地将`java.util.Date`转换为`java.sql.Date`或`java.sql.Timestamp`,以便能够被`setDate()`和`setTimestamp()`方法所接受。这种方法不仅可以避免类型不匹配的错误,还可以确保数据被准确无误地插入到...

    java中日期格式的转换

    在Java中,`java.sql.Date`和`java.util.Date`虽然都表示日期,但它们之间存在细微差别。`java.sql.Date`主要用于数据库交互,只包含日期部分,而`java.util.Date`包含完整的日期和时间。因此,在某些情况下,可能...

    DateUtil.java

    将java.util.Date类型格式化成字符串显示; 将java.sql.Date类型格式化成字符串显示; 将Timestamp类型格式化成字符串显示 将字符串转换成java.util.Date类型 将字符串转换成java.sql.Date类型 将字符串转换成...

    java中时间格式的转换.docx

    java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); System.out.println("转换后的SQL Date为: " + sqlDate); } } ``` 通过调用`java.sql.Date`的构造函数,并传入`java.util.Date`对象的毫秒...

    Hibernate和java中的对应数据类型

    - `java.util.Date`、`java.sql.Timestamp` 和 `java.util.Calendar` 对应于 SQL 的 `TIMESTAMP` 6. **二进制数据类型**: - `byte[]` 对应于 SQL 的 `VARBINARY` 或 `BLOB` - `java.lang.String` 有时用于存储...

    Oracle Timestamp with Time zone & java

    Java 8引入的`java.time`包相比于旧的`java.util.Date`和`java.sql.Timestamp`,在性能和易用性上都有显著提升。但在数据库层面,Oracle也有优化的索引策略,如B树索引或函数索引,来提高对Timestamp with Time Zone...

Global site tag (gtag.js) - Google Analytics