(JDK8之前) 日期时间相关的API
1.System类中的currentTimeMillis()
返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差,称为时间戳。
用途
获取时间差,精确到毫秒。
long start = System.currentTimeMillis();
long end= System.currentTimeMillis();
时间差:end - start
2. Date类
java.util.Date和子类java.sql.Date
1)java.util.Date类
⭕️ 两个构造器的使用
构造器一
创建一个对应当前时间的Date对象
Date date1 =new Date();
System.out.println(date1); //Sat Feb 16 16:35:31 GMT+08:00 2019
System.out.println(date1.getTime()); //1550306204104
构造器二
创建指定毫秒数的Date对象
Date date2 =new Date(155030620410L);
System.out.println(date2.toString()); //Sat Nov 30 16:03:40 CST 1974
⭕️ 两个方法的使用
>toString()
显示当前的年、月、日、时、分、秒
System.out.println(date1.toString()); //Sat Feb 16 16:35:31 GMT+08:00 2019
>getTime()
获取当前Date对象对应的毫秒数。(时间戳)
System.out.println(date1.getTime()); //1550306204104
2) java.sql.Date类
java.sql.Date对应着数据库中的日期类型的变量
⭕️ 如何实例化
java.sql.Date date3 =new java.sql.Date(35235325345L);
System.out.println(date3); //1971-02-13
⭕️ 如何将java.util.Date对象转换为java.sql.Date对象
Date date6 =new Date();
java.sql.Date date7 =new java.sql.Date(date6.getTime());
3. SimpleDateFormat
SimpleDateFormat对日期Date类的格式化和解析
SimpleDateFormat的实例化
使用默认构造器:
SimpleDateFormat sdf =new SimpleDateFormat();
按照指定的方式格式化和解析:调用带参的构造器
SimpleDateFormat sdf1 =new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
1.格式化:日期 --->字符串
Date date =new Date();
System.out.println(date); // Tue Feb 02 13:09:52 CST 2021
String format = sdf.format(date);
System.out.println(format); // 21-2-2 下午1:09
2. 解析:格式化的逆过程,字符串 ---> 日期
String str ="19-12-18 上午11:43";
Date date1 = sdf.parse(str);
System.out.println(date1);// Wed Dec 18 11:43:00 CST 2019
4. Calendar(抽象类)
实例化
方式一:创建其子类(GregorianCalendar)的对象
方式二:调用其静态方法getInstance()
Calendar calendar = Calendar.getInstance();
// System.out.println(calendar.getClass()); 结果表明它的类仍然是GregorianCalendar
常用方法
1. get()
获取该天是这个 月/年 的第几天
int days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
2. set()
//calendar可变性
calendar.set(Calendar.DAY_OF_MONTH,22); //将它改为这个月的第22天
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
3. add()
calendar.add(Calendar.DAY_OF_MONTH,-3); // 将它减少为这个月的第22-3=19天
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
4. getTime(): 日历类---> Date
Date date = calendar.getTime(); //将日历类改为Date类
System.out.println(date);
5. setTime(): Date ---> 日历类
Date date1 =new Date();
calendar.setTime(date1);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days);
(JDK8) 日期时间相关的API
LocalDate、LocalTime、LocalDateTime 的使用
1.LocalDateTime相较于LocalDate、LocalTime,使用频率要高
2.类似于Calendar
实例化
1. now():获取当前的日期、时间、日期+时间
LocalDate localDate = LocalDate.now(); // 2021-02-02
LocalTime localTime = LocalTime.now(); //14:49:05.981
LocalDateTime localDateTime = LocalDateTime.now(); //2021-02-02T14:49:05.981
2. of():设置指定的年、月、日、时、分、秒。没有偏移量
LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 6, 13, 23, 43); // 2020-10-06T13:23:43
方法
1. getXxx():获取相关的属性 (eg. 这个月的第几天)
System.out.println(localDateTime.getDayOfWeek()); //TUESDAY
System.out.println(localDateTime.getMonth()); //FEBRUARY
System.out.println(localDateTime.getMonthValue()); // 2
System.out.println(localDateTime.getMinute()); //49
2. withXxx():设置相关的属性(不可变性-有返回值接收)
LocalDate localDate1 = localDate.withDayOfMonth(22);
System.out.println(localDate); //2021-02-02
System.out.println(localDate1); //2021-02-22
3. plusXxx():将相关的属性加上几个数(不可变性-有返回值接收)
LocalDateTime localDateTime3 = localDateTime.plusMonths(3);
System.out.println(localDateTime); //2021-02-02T14:49:05.981
System.out.println(localDateTime3); //2021-05-02T14:49:05.981
4. minusXxx():将相关的属性减去几个数(不可变性-有返回值接收)
LocalDateTime localDateTime4 = localDateTime.minusDays(6);
System.out.println(localDateTime); //2021-02-02T14:49:05.981
System.out.println(localDateTime4); //2021-01-27T14:49:05.981