文章目录
前言
主要讲述java.util.Date 与 java.sql.Date的区别于转换
两者联系
图片来自于其他博客,具体忘啦
共同点:都有getTime方法返回毫秒数,可以直接构建
不同点:
1、java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分,一般在读写数据库的时候用,PreparedStament的setDate()的参数和ResultSet的getDate()方法的都是java.sql.Date
2、java.util.Date是在除了SQL语句的情况下面使用,一般是日常日期字段
3、java.util.Date 是 java.sql.Date 的父类,即:继承关系:java.lang.Object --》 java.util.Date --》 java.sql.Date
java.util.Date 与 java.sql.Date
//java.sql.Date转为java.util.Date
//java.sql.Date date=new java.sql.Date(); 显示异常 connot resolve constractor Date()
java.sql.Date date=new java.sql.Date();
java.util.Date d=new java.util.Date (date.getTime());
//java.util.Date转为java.sql.Date
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());
own’s
Date date = new Date();
System.out.println("utilDate为" + date);
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
System.out.println("sqlDate为" + sqlDate);
java.sql.Time sTime=new java.sql.Time(date.getTime());
System.out.println("sTime" + sTime);
//utilDate为Thu Aug 02 17:33:53 CST 2018
//sqlDate为2018-08-02
//sTime17:33:53
ps: getTime()是获得时间戳,若直接用时间戳转换为Date格式,需要用Long.valueOf()
new java.sql.Date(Long.valueOf("1534403259275"));//2018-08-16
new java.util.Date(Long.valueOf("1534403259275"));//Thu Aug 16 15:07:39 CST 2018
Date 转为 String (以下的 sqlDate 是通过 utilDate 转换的)
yyyy-MM-dd hh:mm:ss
//date:Thu Aug 02 17:33:53 CST 2018
//sqlDate:2018-08-02
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String sdf1 = f.format(date);
System.out.println("utilsdf1+" + sdf1);
String sdf2 = f.format(sqlDate);
System.out.println("sqlsdf2+" + sdf2);
String str = "2018-03-02";
String sdf3 = f.format(str);
System.out.println("sdf3+" + sdf3);
//utilsdf1+2018-08-02 05:37:42
//sqlsdf2+2018-08-02 05:37:42
//Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date
yyyy-mm-dd
//date:Thu Aug 02 17:33:53 CST 2018
//sqlDate:2018-08-02
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");
String sdf1 = f.format(date);
System.out.println("utilsdf1+" + sdf1);
String sdf2 = f.format(sqlDate);
System.out.println("sqlsdf2+" + sdf2);
String str = "2018-03-02";
String sdf3 = f.format(str);
System.out.println("sdf3+" + str);
//utilsdf1+2018-08-02
//sqlsdf2+2018-08-02
//Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date
String 转Date(传入的参数格式多了时分秒,可以截掉,少了会报错)
yyyy-MM-dd
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");
String str = "2018-03-02";
Date sdf3 = f.parse(str);
System.out.println("sdf3+" + sdf3);
//sdf3+Fri Mar 02 00:00:00 CST 2018(返回utilDate)
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");
String str = "2018-03-02 12:12:12";
Date sdf3 = f.parse(str);
System.out.println("sdf3+" + sdf3);
//sdf3+Fri Mar 02 00:00:00 CST 2018
yyyy-MM-dd hh:mm:ss
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String str = "2018-03-02";
Date sdf3 = f.parse(str);
System.out.println("sdf3+" + sdf3);
//Exception in thread "main" java.text.ParseException: Unparseable date: "2018-03-02"
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String str = "2018-03-02 12:12:12";
Date sdf3 = f.parse(str);
System.out.println("sdf3+" + sdf3);
//sdf3+Fri Mar 02 00:12:12 CST 2018(变成了utilDate格式)
总结
1.sqlDate 是用于数据库操作,没有时分秒,如2018-09-09,utilDate 用于日常字段,如 Thu Aug 02 17:33:53 CST 2018 ,sqlDate 与 utilDate 相互转换通过 getTime() 方法。
2.Date 与 String 的转换
2.1 Date 转 String :sqlDate 与 utilDate 可以转成任意格式的 String
2.2 String 转 Date:传入个String 格式没有时分秒,sdf 也不能有时分秒;传入个String 格式有时分秒,sdf 两种都可以