Java 日期数据转换时报 java.lang.IllegalArgumentException at java.sql.Date.getHours JSONException 错误,分析原因是由于 java.util.Date 和 java.sql.Date 转换造成的问题。
java.sql.Date 是针对SQL语句使用的,它只包含日期而没有时间部分继承了 java.sql.Date,被继承关系如下:
java.lang.Object --> java.util.Date --> java.sql.Date
案例 java.util.Date 转换成 java.sql.Date 报错,反之正常,具体代码如下:
package com.yoodb; import java.util.Date; public class TestMain { public static void main(String[] args) { Date date = new Date(); java.sql.Date da = (java.sql.Date) date; System.out.println(da); } }
错误日志如下:
Exception in thread "main" java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date at com.yoodb.TestMain.main(TestMain.java:6)
将"yyyy-mm-dd"格式的字符串转换为java.sql.Date,具体代码如下:
package com.yoodb; import java.text.ParseException; import java.text.SimpleDateFormat; public class TestMain { public static void main(String[] args) { SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String dateStringToParse = "2015-11-04"; java.util.Date date; try { date = bartDateFormat.parse(dateStringToParse); java.sql.Date sqlDate = new java.sql.Date(date.getTime()); System.out.println(sqlDate.getTime()); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
java.sql.Date主要是用于数据库sql语句中,java.sql.Date是为了配合SQL DATE而设置的数据类型。“规范化”的java.sql.Date只包含年月日信息,时分秒毫秒都会清零。格式类似:YYYY-MM-DD。