java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和联系

栏目:Java基础 作者:admin 日期:2015-04-19 评论:0 点击: 1,276 次

在Web开发中,避免不了对日期的操作,常用的关于时间的类有这么几个:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp,这几个类在JDK的定义如下所示:
java.lang.Object 
....|__java.util.Date 
..........|__java.sql.Date/java.sql.Timestamp/java.sql.Time
....|__java.security.Timestamp
java.util.Date日期格式为:年月日时分秒 
java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据,是专门针对sql设计] 
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.Date类有getTime方法返回毫秒数,所以它可以与java.util.Date进行互换:
java.sql.Date转为java.util.Date
java.sql.Date sqlDate=new java.sql.Date();
java.util.Date utilDate=new java.util.Date (sqlDate.getTime());
 java.util.Date转为java.sql.Date
java.util.Date utilDate=new Date();
java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());

java.sql.Time类屏蔽了java.util.Date的日期有关的字段(形如:yyyy-MM-dd),因此,不能通过这个类访问日期有关的信息,比如:如果你通过sqlTime.getYear()方法去获取年有关的信息,此方法会抛出一个IllegalArgumentException异常。这是因为java.sql.Time在继承java.util.Date类的时候对父类进行了重写,禁用了日期访问的方法。之所以这么处理,是为了和数据库的Time数据类型相匹配,数据库的Time数据类行只是保存时间有关的字段。

java.sql.date 是只包含了日期。而 java.sql.time 只包含了一个时间。java.sql.time java.sql.date 二者如何组合成一个java.util.date呢?取毫秒相加,作为java.util.date的构造方法参数就可以了。
java.sql.Date d = new java.sql.Date(new java.util.Date().getTime());
java.sql.Time t = new java.sql.Time(new java.util.Date().getTime());
java.util.Date day = new java.util.Date(d.getTime() + t.getTime());
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,并把它返回给用户使用。

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和联系的更多相关文章

  1. java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception

    在使用ajax主题时出现上述错误的解决办法是将form表单中的action属性值改为*.action后就可以解决.至于为什么会这样不太明白.但是修改action的属性值以后就会出现另一个错误即 对应的 ...

  2. java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结

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

  3. 常用类一一时间处理相关类一一java.util.Tomezone(java.util.Calendar , java.util.Date , java.text.DateFormat)

    时间处理相关类 时间是一个一维的东东.所以,我们需要一把刻度尺来区表达和度量时间.在计算机世界,我们把1970 年 1 月 1 日 00:00:00定为基准时间,每个度量单位是毫秒(1秒的千分之一). ...

  4. Mybatis按照SQL查询字段的顺序返回查询结果,使用resultType="java.util.LinkedHashMap"

    在使用Mybatis开发时,Mybatis返回的结果集就是个map,当返回map时只需要做好SQL映射就好了,减少了代码量,简单便捷,缺点是不太方便维护,但是写大量的vo类去返回也挺累的,这个看你个人 ...

  5. Date类(java.util)和SimpleDateFormat类(java.text)

    在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用 java.util 包中的 Date 类.这个类最主要的作用就是获取当前时间,我们来看下 Date 类的使用: 使用 Date 类的默 ...

  6. java.util.UnknownFormatConversionException: Conversion = ''';

    今天在测试一个新的项目,在执行sql查询报表的时候.由于我的sql中带有%,导致在输出日志时报错“java.util.UnknownFormatConversionException: Convers ...

  7. java util包概述

    util是utiliy的缩写,意为多用途的,工具性质的包这个包中主要存放了:集合类(如ArrayList,HashMap等),随机数产生类,属性文件读取类,定时器类等类.这些类极大方便了Java编程, ...

  8. java基础-学java util类库总结

    JAVA基础 Util包介绍 学Java基础的工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构.本章介绍Java的实用工具类库java.util包.在这个包中,Java ...

  9. java.util中,util是什么意思

    Util是utiliy的缩写,是一个多功能.基于工具的包. java.util是包含集合框架.遗留的 collection 类.事件模型.日期和时间设施.国际化和各种实用工具类(字符串标记生成器.随机 ...

随机推荐

  1. static_class

    <?php class MyObject { public static $myStaticVar = 0; function myMethod() { self::$myStaticVar + ...

  2. 第五篇、javascript正则表达式二

    一.内容概要 1)创建着呢规则表达式对象的两种方法 2)正则表达式的常用属性和方法 3)string对象常用方法中可以使用正则表达式 4)ES中其他预定义的对象:Math.Date.Number.Bo ...

  3. hd acm 1297

    问题:n个人排队,要求女生不能单独站,可以全是男生,可以全是女生. 例子:n=7,FFFF,FFMM,FFFM,MFFF,MMFF,MMMM,MFFM(F代表女生,M代表男生). 代码:(来自 蓝飞技 ...

  4. hihocoder 第五十二周 高斯消元·二【高斯消元解异或方程 难点【模板】】

    题目地址:http://hihocoder.com/contest/hiho57/problem/1 输入 第1..5行:1个长度为6的字符串,表示该行的格子状态,1表示该格子是亮着的,0表示该格子是 ...

  5. wampserver2 配置ssl 经过验证 可用

    本文原地址 http://blog.csdn.net/taosst/article/details/2182966 http://forum.wampserver.com/read.php?2,329 ...

  6. LINQ 学习路程 -- 查询操作 Aggregate

    聚合操作执行数学的运算,如平均数.合计.总数.最大值.最小值 Method Description Aggregate 在集合上执行自定义聚集操作 Average 求平均数 Count 求集合的总数 ...

  7. castle windsor学习-----How components are created

  8. oarcle12c打开本地数据库

    --显示当前数据库的链接db,是cdb还是pdb. show con_name;--在oracle12c中打开本地数据库,否则本地数据库无法链接alter pluggable database pdb ...

  9. php gizp压缩传输js和css文件

    1. [代码][PHP]代码    <?php     /**     *  完整调用示例:     *  1.combine.php?t=j&b=public&fs=jslib ...

  10. HTML-CSS浮动元素详解

    浮动定位是指 1.1将元素排除在普通流之外,即元素将脱离标准文档流 1.2元素将不在页面占用空间 1.3将浮动元素放置在包含框的左边或者右边 1.4浮动元素依旧位于包含框之内 2. 浮动的框可以向左或 ...