java java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和联系
2015-07-13 15:13
531 查看
在web开发中,避免不了对日期的操作,就几种常见的日期操作做个总结(部分参考网络,在此表示感谢):
java.util.Date、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.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更加方便和快捷的许多操作,如获取一年当中的第几个星期,各个月的天数等便捷的方法。
·MS Sqlserver数据库的DateTime类型,需要年月日时分秒,选择java.sql.Timestamp类型
我们可以使用DateFormat处理字符串来定义时间日期的格式
转载自:http://www.iteye.com/topic/1137830
java.util.Date、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处理字符串来定义时间日期的格式
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(); }
转载自:http://www.iteye.com/topic/1137830
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统