在学习日期处理的时候,必须明白Date类有两个。一个在sql包下,一个在util包下。他们的关系是:java.util.Date是java.sql.Date的父类。同时还要知道sql包下的Date只是面向数据库,而util包下的Date则是面向业务逻辑的。
1.向数据库插入信息。
ps.setDate(3,new java.sql.Date(newDate().getTime()));
ps.setDate这个设置的Date是sql包下的Date。
因此在这个setDate的方法中第二个参数不能是util包下的Date。(可以这么解释。Util包下的Data是父类,而sql包下的Date是子类。子类不能接受父类的参数。)那么我们只能在第二个参数里面放一个sql的Date。在这里我们可以看一下sql包的Date的构造方法。
我们需要传一个long类型的毫秒数(这个参数表示我们要插入数据库的日期值)进去。怎么传呢?new Date().getTime() 这里的Date是util的,因为我们要获取时间,没办法只能用util的(util的Date是面向逻辑业务的)。那getTime()方法呢?是这样的,如果你单纯建立一个测试类写入
System.out.println(new Date().getTime());
其输出结果为:1356413797263
话说回来,那么为什么传一个1356413797263的参数会在数据库里写一个2012-12-25这个样的值呢?他会更具这个时间间隔的毫秒数自动转换(因为起始时间是一定的)。
总结一下:
2.从数据库里读取数据
System.out.println(name+"的创建日期是"+rs.getDate("date"));
这里getDate()方法返回的是一个sql包下的Date。同时我们也可以将这个返回值转换为util包下的Date。这里不需要强制转换。因为子类可以赋给父类。