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。