java.util.Date 和 Java.sql.Date
java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类
java.util.Date是常用的表示时间的类,我们通常格式化或者得到当前时间都是用他
java.sql.Date是针对SQL语句使用的,就是一个包装了毫秒值的瘦包装器 (thin wrapper)之后在读写数据库的时候用他,因为PreparedStament的setDate()的第2参数和ResultSet的getDate()方法的第2个参数都是java.sql.Date
格式如下:
java.util.Date 是 年-月-日 时:分:秒.毫秒
java.sql.Date 是 年-月-日
java.sql.Time 是 时:分:秒
java.sql.Timestamp 是 年-月-日 时:分:秒
将util.Date转换成sql.Date是:
java.util.Date date=new Java.util.Date();
java.sql.Date d=new java.sql.Date (date.getTime());
如何将"yyyy-mm-dd"格式的字符串转换为java.sql.Date
//SimpleDateFormat
是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String c= "2012-12-01"; try{ java.util.Date date = dateFormat.parse(dateString); //解析字符串的文本,生成Date
// java.util.Date.getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 java.sql.Date sqlDate = new java.sql.Date(date.getTime()); System.out.println(sqlDate.getTime()); } catch (Exception ex) { System.out.println(ex.getMessage()); }
如果我们把一个java.sql.Date值通过PrepareStatement的setDate方法存入数据库时,java程序会对传入的java.sql.Date规范化,非规范化的部分将会被劫取。然而,我们java.sql.Date一般由java.util.Date转换过来
如:java.sql.Date sqlDate=new java.sql.Date(new java.util.Date().getTime()).
显然,这样转换过来的java.sql.Date往往不是一个规范的java.sql.Date.要保存java.util.Date的精确值,
我们需要利用java.sql.Timestamp,使用ResultSet的getTimestamp取得数据,这样不会产生截取问题
java.sql.Date 只存储日期数据不存储时间数据
// 会丢失时间数据
preparedStatement.setDate(1, new java.sql.Date(date.getTime()));
//可以这样来处理
preparedStatement.setTimestamp(1, new Timestamp(new java.util.Date().getTime()));
//想要得到完整的数据,包括日期和时间,可以这样
java.util.Date d = resultSet.getTimestamp(1);
//这样处理更合适一些,可以避免一些潜在Timestamp 问题
java.util.Date d = new java.util.Date(resultSet.getTimestamp(1).getTime());
往数据库存储的时候可以接收 java.util.Date类型 再用getTime()方法得到代表那个Date对象的long值,再以这个long值构造一个Timestamp对象 存进数据库中。
从存数据库里取的时候,可以先得到Timestamp用他的getTime()方法得到long值,再以这个long值构造一个 java.util.Date对象,这样就可以对这个Date对象操作了。比如说 new SimpleDateFormat("yyyyy-MM-dd HH:mm:ss").format(Date)或format(Timestamp)都行~
参考:http://kingyang85.blog.163.com/blog/static/1287536762010696217335/