网站开发后的经验总结,北新泾街道网站建设,试用型网站,国际电子商务网站建设java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类)。java.sql.Date是java.util.Date的子类#xff0c;是一个包装了毫秒值的瘦包装器#xff0c;允许 JDBC 将毫秒值标识为 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以…java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类)。java.sql.Date是java.util.Date的子类是一个包装了毫秒值的瘦包装器允许 JDBC 将毫秒值标识为 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数。 为了与 SQL DATE 的定义一致由 java.sql.Date 实例包装的毫秒值必须通过将时间、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。说白了java.sql.Date就是与数据库Date相对应的一个类型而java.util.Date是纯java的Date。从类 java.util.Date 继承的方法after, before, clone, compareTo, equals, getDate, getDay, getMonth, getTime, getTimezoneOffset, getYear, hashCode, parse, setDate, setMonth, setYear, toGMTString, toLocaleString, UTCsql.Date也有时间的如果不想用oracle的to_date函数可以自己生成sql.Date对象String s 2012-06-21 00:10:00;SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);java.util.Date d1 sdf.parse(s); //先把字符串转为util.Date对象java.sql.Date d2 new java.sql.Date(d1.getTime()); //再转换为sql.Date对象想要将带时分秒的时间插入到数据库中除了Oracle数据库的to_date()方法之外。我们可以用 Timestamp类来实现。java.sql.Date是规范化之后的时间其时分秒部分被截取掉了。java.sql.Date是为了配合SQL DATE而设置的数据类型。“规范化”的java.sql.Date只包含年月日信息时分秒毫秒都会清零。格式类似YYYY-MM-DD。当我们调用ResultSet的getDate()方法来获得返回值时java程序会参照规范的java.sql.Date来格式化数据库中的数值。因此如果数据库中存在的非规范化部分的信息将会被劫取。在sun提供的ResultSet.java中这样对getDate进行注释的Retrieves the of the designated column in the current row of this ResultSet object as a “java.sql.Date” object in the Java programming language.同理。如果我们把一个java.sql.Date值通过PrepareStatement的setDate方法存入数据库时java程序会对传入的java.sql.Date规范化非规范化的部分将会被劫取。然而我们java.sql.Date一般由java.util.Date转换过来如java.sql.Date sqlDatenew java.sql.Date(new java.util.Date().getTime()).显然这样转换过来的java.sql.Date往往不是一个规范的java.sql.Date.要保存java.util.Date的精确值我们需要利用java.sql.Timestamp.eg String s2012-01-02 03:12:21;SimpleDateFormat sp newSimpleDateFormat(yyyy-MM-dd hh:mm:ss);java.util.Date du sp.parse(s);java.sql.Timestamp st newjava.sql.Timestamp(du.getTime());把一个日期值写入数据库中发现由java.util.Date转存为java.sql.Date后只有年月日没有了时分秒:java.util.Date ud newjava.util.Date();java.sql.Date sd newjava.sql.Date(ud.getTime());这个可是不行的用户至少要精确到分。由于java.sql.Date为了能够遵守sql日期标准把所有时分秒都归了零。只有用Timestamp来进行保存由于Timestamp是子类因此写好的bean里面不需要修改数据类型。pstmt.setTimestamp(15,newjava.sql.Timestamp(Calendar.getInstance().getTime().getTime()));//当前时间pstmt.setTimestamp(16,newjava.sql.Timestamp(userFile.getCreateTime().getTime()));//指定时间对于指定时间还可以用Calendar类的setTime()方法来设置Calendar cal Calendar.getInstance();System.out.println(cal.getTime().getTime());String string2012-01-01 01:02:03;SimpleDateFormat sp newSimpleDateFormat(yyyy-MM-dd hh:mm:ss);java.util.Date da sp.parse(string);cal.setTime(da);System.out.println(cal.getTime().getTime());在数据库中插入带时分秒的时间需要用Timestamp。一般做这种操作用框架居多我就说一下Hibernate吧。在数据库表中字段类型设置为Date数据类型代码中映射的字段类型设置为 Timestamp类型 private Timestamp date; 在映射文件中 Type也是时间戳类型的。在赋值取值的时候用前面的操作获取到需要的时间的时间戳对象直接赋值就行。然后就可以用Hibernate执行方法将带时分秒的时间存入到数据库里了。(不过这一点意义好像不是很大大多都是直接varchar2存进去取时候再to_date一下或者在代码里处理)还需要说一点的就是在使用SimpleDateFormat时格式化时间的 yyyy.MM.dd 为年月日而如果希望格式化时间为12小时制的则使用hh:mm:ss如果希望格式化时间为24小时制的则使用HH:mm:ss上代码SimpleDateFormat ss newSimpleDateFormat(yyyy-MM-dd hh:mm:ss);//12小时制SimpleDateFormat sdformat newSimpleDateFormat(yyyy-MM-dd HH:mm:ss);//24小时制Date d newDate();SimpleDateFormat ss newSimpleDateFormat(yyyy-MM-dd hh:mm:ss);//12小时制System.out.println(ss.format(d));Date date newDate();SimpleDateFormat sdformat newSimpleDateFormat(yyyy-MM-dd HH:mm:ss);//24小时制String LgTime sdformat.format(date);System.out.println(LgTime);结果为2008-05-2801:32:542008-05-2813:32:54Date类已经很少用了。更多使用的是CalendarCalendar date Calendar.getInstance();date.get(Calendar.HOUR_OF_DAY );//得到24小时机制的date.get(Calendar.HOUR);// 得到12小时机制的