1.首先看下java.sql.Date类的相关类图:
可以看到java.sql.Date是java.util.Date的子类
- java.util.Date : 通常情况下用它获取当前时间或构造时间
- java.sql.Date : 是针对SQL语句使用的,它只包含日期而没有时间部分
区别:
(1)共同点:
都有getTime方法返回毫秒数,可以直接构建
(2)不同的点:
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.sql.Date和java.util.Date两个类如何使用,以及使用的区别
代码如下:
public class Test {
public static void main(String[] args) {
//输出java.util.Date类
Date date = new Date();
System.out.println(date);
//构造并输出java.sql.Date类
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
System.out.println(sqlDate);
//java.sql.Date自动转型java.util.Date
Date utilDate = sqlDate;
System.out.println(utilDate);
}
输出结果如下:
这里根据结果做个总结:
一.java.sql.Date是java.util.Date的子类,平时服务端接收日期参数一般选用java.util.Date
二.java.sql.Date类没有时分秒,只有年月日
三. java.util.Date类转java.sql.Date类,向下转型,需要调用java.util.Date类的getTime()方法,取得long类型返回值,作为参数转换。
四.java.sql.Date类转java.util.Date类,向上转型,会自动转换,但是数值我们可以很明显的看到,也没有了时分秒。
五.具体使用根据业务需求决定,有的业务时间不要精确到时分秒,有的需要,根据需求使用相应的时间类。
jdk1.8新增日期API
public class Test09 {
//这是一个main方法,是程序的入口:
public static void main(String[] args) {
//1.完成实例化:
//方法1:now()--获取当前的日期,时间,日期+时间
LocalDate localDate = LocalDate.now();
System.out.println(localDate);
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
//方法2:of()--设置指定的日期,时间,日期+时间
LocalDate of = LocalDate.of(2010, 5, 6);
System.out.println(of);
LocalTime of1 = LocalTime.of(12, 35, 56);
System.out.println(of1);
LocalDateTime of2 = LocalDateTime.of(1890, 12, 23, 13, 24, 15);
System.out.println(of2);
//LocalDate,LocalTime用的不如LocalDateTime多
//下面讲解用LocalDateTime:
//一些列常用的get***
System.out.println(localDateTime.getYear());//2020
System.out.println(localDateTime.getMonth());//JUNE
System.out.println(localDateTime.getMonthValue());//6
System.out.println(localDateTime.getDayOfMonth());//14
System.out.println(localDateTime.getDayOfWeek());//SUNDAY
System.out.println(localDateTime.getHour());//22
System.out.println(localDateTime.getMinute());//22
System.out.println(localDateTime.getSecond());//6
//不是set方法,叫with
//体会:不可变性
LocalDateTime localDateTime2 = localDateTime.withMonth(8);
System.out.println(localDateTime);
System.out.println(localDateTime2);
//提供了加减的操作:
//加:
LocalDateTime localDateTime1 = localDateTime.plusMonths(4);
System.out.println(localDateTime);
System.out.println(localDateTime1);
//减:
LocalDateTime localDateTime3 = localDateTime.minusMonths(5);
System.out.println(localDateTime);
System.out.println(localDateTime3);
}
}