• java.lang.IllegalArgumentException at java.sql.Date.getHours JSONException


    在我这里是由于java.util.Date 和 java.sql.Date的转换问题造成的.


    好像是由于在json里要输出的实体类中的一个属性类型为java.sql.Date.我将其改变成了java.util.Date.就好了.


    另附上: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类型,插入时转化pstmt.setDate( new java.sql.Date(java.util.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);

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

    1、将java.util.Date 转换为 java.sql.Date
    java.sql.Date sd;
    java.util.Date ud;
    //initialize the ud such as ud = new java.util.Date();


    sd = new java.sql.Date(ud.getTime());


    2、若要插入到数据库并且相应的字段为Date类型
    可使用PreparedStatement.setDate(int ,java.sql.Date)方法
    其中的java.sql.Date可以用上面的方法得到


    也可以用数据库提供TO_DATE函数
    比如 现有 ud
    TO_DATE(new SimpleDateFormat().format(ud,"yyyy-MM-dd HH:mm:ss"),
    "YYYY-MM-DD HH24:MI:SS")
    注意java中表示格式和数据库提供的格式的不同


    sql="update tablename set timer=to_date('"+x+"','yyyymmddhh24miss') where ....."


    这里的x为变量为类似:20080522131223
     
    3、如何将"yyyy-mm-dd"格式的字符串转换为java.sql.Date


    方法1


    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.getTime());
    }
    catch (Exception ex) {
         System.out.println(ex.getMessage());
    }
     
    方法2
    String    strDate    =    "2002-08-09";  
    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()));
    java.util.Date和java.sql.Date的区别
    java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类)。


    但是为什么java.sql.Date类型的值插入到数据库中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 <code>ResultSet</code> 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 sqlDate=new java.sql.Date(new java.util.Date().getTime()).
    显然,这样转换过来的java.sql.Date往往不是一个规范的java.sql.Date.要保存java.util.Date的精确值,
    我们需要利用java.sql.Timestamp.
    Calendar:


    Calendar calendar=Calendar.getInstance();
    //获得当前时间,声明时间变量
    int year=calendar.get(Calendar.YEAR);
    //得到年
    int month=calendar.get(Calendar.MONTH);
    //得到月,但是,月份要加上1
    month=month+1;
    int date=calendar.get(Calendar.DATE);
    //获得日期
    String today=""+year+"-"+month+"-"+date+"";


    注:本文转自http://chendang.javaeye.com/blog/323069仅供学习参考


    ---------------------------------------------------------------------------------------------------------------------------------
    copyright:http://www.cnblogs.com/anee/
  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/anee/p/2675899.html
Copyright © 2020-2023  润新知