黑马程序员技术交流社区

标题: 关于日期转换的问题 [打印本页]

作者: 蒋名勇    时间: 2013-4-23 12:22
标题: 关于日期转换的问题
本帖最后由 蒋名勇 于 2013-4-25 01:24 编辑

因为数据库里面保存时间的都是date类型的,而java代码中插入数据时大都是以字符串形式输入,然后接受数据库的数据输出显示也一般都是以字符串的形式,而且java中的date有有sql.date和util.date,所以我很多时候不知道用哪个好,当时老师说的时候也没有听仔细,所以,请大侠们指教一下,怎么样在java代码和数据库之间转换,不要使用to_char(),to_date(),或者是sqlserver的Convert(),而是实体类和数据库表对应的都是date类型,在此先谢过咯
作者: 薛淑凯    时间: 2013-4-23 15:06
问题不是太懂,还没学到数据库,在网上找了找,不知道有没有帮助,算是抛砖引玉了
关于sql.date()的说明
为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将时间、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。
也就是只有日期了,没了时间
java.sql.Date date=new Java.sql.Date();
java.util.Date d=new java.util.Date (date.getTime());
这就完成了sql.Date()到util.Date()转化


作者: 李志敏    时间: 2013-4-23 22:49
那就直接存成数字字符串就行了  写几个方法 用的时候想转成什么格式就转成什么格式{:soso_e113:}
作者: 陈湘林    时间: 2013-4-24 00:30
【父类】java.util.Date日期格式为:年月日时分秒
【子类】java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据]
【子类】java.sql.Time日期格式为:时分秒
【子类】java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒)
针对不同的数据库选用不同的日期类型
·Oracle的Date类型,只需要年月日,选择使用java.sql.Date类型
·MS Sqlserver数据库的DateTime类型,需要年月日时分秒,选择java.sql.Timestamp类型
生成日期对象
方法一:
除了父类,三个子类均可通过给其发送valueOf()消息,生成所需格式的对象。

  1. java.sql.Date sqlDate = java.sql.Date.valueOf("2010-08-20");
  2. java.sql.Time time = java.sql.Time.valueOf("13:44:53");
  3. java.sql.Timestamp time = java.sql.Timestamp.valueOf("2010-08-20 14:06:27.186");
  4. 方法二:
  5. java.util.Date——>java.sql.Date
  6.   new java.sql.Date(new java.util.Date().getTime());
  7.   new java.util.Date(new java.sql.Date().getTime());//此处IDE报错
  8. java.util.Date——>java.sql.Timestamp
  9.   new java.sql.Timestamp(new java.util.Date().getTime());//此处IDE报错
  10. java.util.Date——>java.sql.Time
  11.   new java.sql.Time(new java.util.Date().getTime());
  12. Timestamp timestamp  = new Timestamp(System.currentTimeMillis());

  13. 我们可以使用DateFormat处理字符串来定义时间日期的格式
  14. 注:String都是先转换为java.util.Date,然后再转换成所需的格式
  15. Calendar
  16. Calendar calendar=Calendar.getInstance();
  17. //获得当前时间,声明时间变量
  18. int year = calendar.get(Calendar.YEAR);
  19. int month = calendar.get(Calendar.MONTH);
  20. month = month+1; //[0,11]
  21. int date = calendar.get(Calendar.DATE);
  22. String today = ""+year+"-"+month+"-"+date+"";  
  23. String to Date[java.sql.Date]
  24. String to Time[java.sql.Timestamp]
  25. DateFormat dateFormat;
  26. dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
  27. //dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);
  28. //设定格式
  29. dateFormat.setLenient(false);
  30. java.util.Date timeDate = dateFormat.parse(dateString);
  31. //util类型
  32. java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());
  33. //sql类型
  34. // java.sql.Timestamp dateTime = new java.sql.Timestamp
  35. (timeDate.getTime());
  36. //Timestamp类型
  37. Java代码
  38. public class DateTest  {   
  39.     public static void main(String[] args) throws ParseException{   
  40.         try{   
  41.              String dateString = "2010-08-20 12:00:00.125";   
  42.              DateFormat dateFormat;   
  43.              dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS",Locale.ENGLISH);//设定格式   
  44.              dateFormat.setLenient(false);   
  45.              java.util.Date timeDate = dateFormat.parse(dateString);//util类型   
  46.              java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型   
  47.              System.out.println(dateTime);   
  48.         }catch(Exception ex){   
  49.             ex.printStackTrace();   
  50.         }        
  51.     }   
  52. }
复制代码

作者: harborbest    时间: 2013-4-24 08:45
java.util.Date是在除了SQL语句的情况下使用的。
java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分
它们都有getTime方法返回毫秒数,自然就可以直接构建。 java.util.Date 是 java.sql.Date 的父类,前者是常用的表示时间的类,我们通常格式化或者得到当前时间都是用它,后者之后在读写数据库的时候用它,因为PreparedStament的setDate()的第2参数和ResultSet的getDate()方法的第2个参数都是java.sql.Date。
java.sql.Date转为java.util.Date
  1. java.sql.Date date=new java.sql.Date();
  2. java.util.Date d=new java.util.Date (date.getTime());
复制代码
java.util.Date转为java.sql.Date
  1. java.util.Date utilDate=new Date();
  2. java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());
  3. java.util.Date utilDate=new Date();
  4. java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());
  5. java.sql.Time sTime=new java.sql.Time(utilDate.getTime());
  6. java.sql.Timestamp stp=new java.sql.Timestamp(utilDate.getTime());
复制代码
这里所有时间日期都可以被SimpleDateFormat格式化format()
  1. SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  2. f.format(stp);
  3. f.format(sTime);
  4. f.format(sqlDate);
  5. f.format(utilDate)
  6. java.sql.Date sqlDate=java.sql.Date.valueOf(" 2013-4-24");
  7. utilDate=new java.util.Date(sqlDate.getTime());

复制代码

作者: 黄玉昆    时间: 2013-4-24 22:48
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2