zoukankan      html  css  js  c++  java
  • java.util.date与java.sql.date

     因为要调用个存储过程要传入一date型的数据,比如2007-07-15 12:12:23
    查了半天也只找到把"2007-07-15"这个字符串转换成java.sql.date的办法
    java.sql.Date.valueOf(dateStr);
    或者先转换成java.util.date型,再用
    java.sql.Date(date.getTime())
    为什么两种方法就不能加上时间呢

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
    Date date = sdf.parse("2007-07-15 12:12:23")

    这是转换成java.util.data 的类了啊
    我要转换成 java.sql.data啊

    在网上找到一方法
    public static java.sql.Date parseSqlDate(String dateStr, String format) {
    java.util.Date date = parseDate(dateStr, format);
    return parseSqlDate(date);
    }
    public static java.util.Date parseDate(String dateStr, String format) {
    java.util.Date date = null;
    try {
    java.text.DateFormat df = new java.text.SimpleDateFormat(format);
    String dt = Normal.parse(dateStr).replaceAll("-", "/");
    String dt = dateStr.replaceAll("-", "/");
    if ((!dt.equals("")) && (dt.length() < format.length())) {
    dt
    += format.substring(dt.length()).replaceAll("[YyMmDdHhSs]","0");
    }
    date = (java.util.Date) df.parse(dt);
    } catch (Exception e) {
    }
    return date;
    }


    但是报错啊
    String dt = Normal.parse(dateStr).replaceAll("-", "/");
    这句报错

    谁知道
    String dt = Normal.parse(dateStr).replaceAll("-", "/");
    中的Normal是个什么东东

    不胜感激


    方法错了
    public static java.sql.Date parseSqlDate(String dateStr, String format) {
    java.util.Date date = parseDate(dateStr, format);
    return parseSqlDate(date);
    }
    public static java.util.Date parseDate(String dateStr, String format) {
    java.util.Date date = null;
    try {
    java.text.DateFormat df = new java.text.SimpleDateFormat(format);
    String dt = Normal.parse(dateStr).replaceAll("-", "/");

    if ((!dt.equals("")) && (dt.length() < format.length())) {
    dt
    += format.substring(dt.length()).replaceAll("[YyMmDdHhSs]","0");
    }
    date = (java.util.Date) df.parse(dt);
    } catch (Exception e) {
    }
    return date;
    }

    是这个

    注意:java.sql.Date是java.util.Date的子类。


    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        try{
        Date date = sdf.parse("2007-07-15 12:12:23");
        java.sql.Date sqlDate=new java.sql.Date(date.getTime());
        String strDate=sdf.format(sqlDate);
        System.out.println(strDate);
        }catch(Exception e){
        e.printStackTrace();
        }

    按照自由鸟的办法传入的还是一个只有年月日的东西啊,传不进时间啊
    存储过程的定义如下
    czd_save(in_id in number,in_tm in date)
    java中调用如下
    proc = conn.prepareCall("{ call czd_save(?,?)}");
    proc.setInt(1, Integer.parseInt(user.jdjh_lcbz));
    proc.setDate(2,sqlDate);
    proc.execute(); 
    最后看插入表中的还是一个年月日的东西啊,时分进不去啊

    我保存时间数据到数据库的时候都是把字段设置成vchar2类型的
    存进去什么样子取出来就什么样子
    比较方便
     
    ---------------------------------------------------------------------------------------------
    【转】java.util.Date和java.sql.Date的转换(2009-07-17 14:15:33)标签:it   分类:JavaSE
    转自 http://mamaoyuan625.javaeye.com/blog/413188

    法一:
    1.java.text.SimpleDateFormat bartDateFormat = 
    2.                                                new SimpleDateFormat("yyyy-MM-dd"); 
    3.        String dateStringToParse = "2007-7-12"; 
    4.        try { 
    5.             
    6.            java.util.Date date = bartDateFormat.parse(dateStringToParse); 
    7.            java.sql.Date sqlDate = new java.sql.Date(date.getTime()); 
    8.            System.out.println("此时sqlDate的类型:" + sqlDate.getClass().toString()); 
    9.             
    10.        } catch (Exception ex) { 
    11.            System.out.println(ex.getMessage()); 
    12.        }
    java.text.SimpleDateFormat bartDateFormat =
                new SimpleDateFormat("yyyy-MM-dd");
      String dateStringToParse = "2007-7-12";
      try {
      
       java.util.Date date = bartDateFormat.parse(dateStringToParse);
       java.sql.Date sqlDate = new java.sql.Date(date.getTime());
       System.out.println("此时sqlDate的类型:" + sqlDate.getClass().toString());
      
      } catch (Exception ex) {
       System.out.println(ex.getMessage());
      }

    法二:

    Java代码
    1.String strDate = "2009-06-09"; 
    2.        java.util.StringTokenizer st = new StringTokenizer(strDate, "-"); 
    3.         
    4.        java.sql.Date date = new java.sql.Date( 
    5.                                        Integer.parseInt(st.nextToken()), 
    6.                                        Integer.parseInt(st.nextToken()),  
    7.                                        Integer.parseInt(st.nextToken())); 
    8.        System.out.println("此时date的类型:"+date.getClass());
    String strDate = "2009-06-09";
      java.util.StringTokenizer st = new StringTokenizer(strDate, "-");
     
      java.sql.Date date = new java.sql.Date(
              Integer.parseInt(st.nextToken()),
              Integer.parseInt(st.nextToken()),
              Integer.parseInt(st.nextToken()));
      System.out.println("此时date的类型:"+date.getClass());

    结果:

    class java.sql.Date

    说明:ok

    扩展:查看java.sql.Date的源码:

    Java代码
    1.@Deprecated
    2.    public Date(int year, int month, int day) { 
    3.    super(year, month, day); 
    4.    }

    ====================================================================================

    java.util.Date和java.sql.Date的区别及应用       java.util.Date 就是在除了SQL语句的情况下面使用
    java.sql.Date 是针对SQL语句使用的,它只包含日期而没有时间部分
    它都有getTime方法返回毫秒数,自然就可以直接构建
    java.util.Date d = new java.util.Date(sqlDate.getTime());
    ...
    --------------------------------------------------------------------------------
    java.util.Date 是 java.sql.Date 的父类(注意拼写)
    前者是常用的表示时间的类,我们通常格式化或者得到当前时间都是用他
    后者之后在读写数据库的时候用他,因为PreparedStament的setDate()的第2参数和ResultSet的getDate()方法的第2个参数都是java.sql.Date
    转换是
    java.sql.Date date=new Java.sql.Date();
    java.util.Date d=new java.util.Date (date.getTime());
    反过来是一样的

    --------------------------------------------------------------------------------
    继承关系:java.lang.Object --》 java.util.Date --》 java.sql.Date
    具体的转换关系就是java.util.Date d=new java.util.Date (new Java.sql.Date());

    --------------------------------------------------------------------------------
    sql.date,一般是在数据库的时间字段,util.date一般是日常日期字段

    --------------------------------------------------------------------------------
    java.sql.Date主要是用于sql中的!
    而java.util.Date用语一般的环境下都行!

    --------------------------------------------------------------------------------

    SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
           java.util.Date utilDate=new Date();    
           java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());      
           java.sql.Time sTime=new java.sql.Time(utilDate.getTime()); 
           java.sql.Timestamp stp=new java.sql.Timestamp(utilDate.getTime());
          System.out.println(utilDate.getYear());

    这里所有时间日期都可以被SimpleDateFormat格式化format()

    f.format(stp);f.format(sTime);f.format(sqlDate);f.format(utilDate)

    java.sql.Date sqlDate=java.sql.Date.valueOf("2005-12-12");
        
           utilDate=new java.util.Date(sqlDate.getTime());

    --------------------------------------------------------------------------------------------------

    另类取得年月日的方法:

    import java.text.SimpleDateFormat;

    import java.util.*;

    java.util.Date date = new java.util.Date();

    //如果希望得到YYYYMMDD的格式

    SimpleDateFormat sy1=new SimpleDateFormat("yyyyMMDD");

    String dateFormat=sy1.format(date);

    //如果希望分开得到年,月,日

    SimpleDateFormat sy=new SimpleDateFormat("yyyy");

    SimpleDateFormat sm=new SimpleDateFormat("MM");

    SimpleDateFormat sd=new SimpleDateFormat("dd");

    String syear=sy.format(date);

    String smon=sm.format(date);

    String sday=sd.format(date);

  • 相关阅读:
    函数和指针
    SQL Server 2005 存储过程
    位数组
    C的名字空间
    C奇特的声明
    位字段
    Git忽略规则
    常用C库简介
    《SQL Server 2005 编程入门经典》第一到十二章
    Linus:利用二级指针删除单向链表
  • 原文地址:https://www.cnblogs.com/vipbooks/p/5905859.html
Copyright © 2011-2022 走看看